centos7中io流createNewFile()创建文件,返回true,但在系统中特定目录下未找到文件。
没咋看懂,你的意思是。程序没有问题。成功的把文件IO到了磁盘,然后没有找到是吗?你close
了io流没。
你也许可以试试看用JDK7的Path
api
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class MainTest {
public static void main(String[] args) throws Exception {
// 目录
Path folder = Paths.get("D:", "folder1", "folder2");
// 目录不存在创建
if (!Files.isDirectory(folder)) {
Files.createDirectories(folder);
}
// 在目录下创建文件
Path file = Files.createFile(folder.resolve("temp.txt"));
// 获取文件写入流
try(OutputStream fiOutputStream = Files.newOutputStream(file)){
// 写入数据到文件
fiOutputStream.write("Hello".getBytes());
}
}
}
应用启动是否为root用户权限。 普通用户权限 应 授权 进入 linux系统 使用命令
setfacl -m u:username:rwx -R /disk/filename
其中 username 为你的linux系统普通用户名
/disk/filename 为你存储资源的路径 建议使用pwd 获取
1 个赞
全部用的root用户操作的,java程序运行是在 docker容器里面操作的
肯定关闭了,程序运行没毛病,就是找不到 它创建的文件
创建文件的url能截图看看么,代码里面
最后一张图,左边就是要写入的文件夹,右边有个打印的,写入的文件地址:/home/admin/images/imgUpload/20210618092422_001935-1615911575642b.jpg
我看你左边FTP打开的是宿主机吧?你在容器里面运行的java,你做了这个目录共享卷没?
安装了vsftp,创建了一个 admin用户,然后把文件写入到这个用户下面,以前可以,最近突然发现这个上传不上去的毛病
Docker启动你设置了共享卷没呀。Docker是容器,只能IO数据到容器内部。不能直接IO到宿主机。
但是可以映射目录,例如:docker容器的目录 /app
和宿主机目录 /usr/local/app
做映射。那么你Dokcer中的java程序往/app
目录写入数据。在宿主机的/usr/local/app
也会有这个文件,可以通过FTP看到。
1 个赞
卧槽,一语惊醒梦中人,加个挂载映射就可以了,之前是怎么成功的,这个想不通
1 个赞
感谢铁子,不说我还真不会往这方面想