为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2022-09-07 17:53:25
我使用 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 错误。在通过输出流执行复制过程时,如何创建所有缺少的目录?
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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


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();


查看完整回答
反对 回复 2022-09-07
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您可以使用 Files.createDirectories

Files.createDirectories(Paths.get("C:\\javatest\\javanewfolder"));

另外,您可以使用 复制文件 )Files.copy



查看完整回答
反对 回复 2022-09-07
  • 2 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号