centos7中io流createNewFile()返回true但未找到文件

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 Like

全部用的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 Like

卧槽,一语惊醒梦中人,加个挂载映射就可以了,之前是怎么成功的,这个想不通

1 Like

感谢铁子,不说我还真不会往这方面想