gpt4 book ai didi

java - 使用 Java InputStream 复制文件时如何创建不存在的文件夹/子目录?

转载 作者:行者123 更新时间:2023-12-01 17:45:54 28 4
gpt4 key购买 nike

我已使用 InputStream 成功将文件从一个位置复制到另一个位置:

 public static void copy(File src, File dest) throws IOException { 
InputStream is = null;
OutputStream os = null;

try {
is = new FileInputStream("C:\\test.txt");
os = new FileOutputStream("C:\\javatest\\test.txt");

byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buf)) > 0) {
os.write(buf, 0, bytesRead);
}
} finally {
is.close();
os.close();
}
}

当我将不存在的文件夹添加到路径中时,就会出现问题,例如:

os = new FileOutputStream("C:\\javatest\\javanewfolder\\test.txt"); 

这将返回 NullPointerException 错误。通过输出流执行复制过程时如何创建所有丢失的目录?

最佳答案

首先,如果可能的话,我建议您使用java.nio.file类(例如Path),而不是File> 为基础的方法。您将使用文件系统创建 Path 对象。如果这里不需要灵 active ,您可以使用默认文件系统:

final String folder = ...
final String filename = ...
final FileSystem fs = FileSystems.getDefault();
final Path myFile fs.getPath(folder, filename);

那么您的问题就可以通过非常方便的 API 轻松解决:

final Path destinationFolder = dest.getParent();
Files.createDirectories(myPath.getParent());
try (final OutputStream os = Files.newOutputStream(myFile)) {
...
}

如果目录已经存在,Files.createDirectories()方法不会失败,但可能会因为其他原因而失败。例如,如果文件“foo/bar”存在,则 Files.createDirectories("foo/bar/folder") 很可能不会成功。 ;)

请仔细阅读javadoc!

要检查路径是否指向现有目录,只需用户:

Files.isDirectory(somePath);

如果需要,您可以在文件路径之间进行转换。不过,您将丢失文件系统信息:

final Path path1 = file1.toPath();
final File file2 = path2.toFile();

关于java - 使用 Java InputStream 复制文件时如何创建不存在的文件夹/子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55376592/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com