千家信息网

java中文件拷贝剪切的方式有哪些

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要讲解了"java中文件拷贝剪切的方式有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中文件拷贝剪切的方式有哪些"吧!一、文件拷
千家信息网最后更新 2025年02月01日java中文件拷贝剪切的方式有哪些

这篇文章主要讲解了"java中文件拷贝剪切的方式有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中文件拷贝剪切的方式有哪些"吧!

一、文件拷贝

传统IO中的文件copy的方法,使用输入输出流,实际上就是重新创建并写入一个文件。如果目标文件已经存在,就覆盖掉它,重新创建一个文件并写入数据。这种方式不够友好,覆盖掉原有文件没有给出任何提示,有可能导致原有数据的丢失

@Testvoid testCopyFile1() throws IOException {  File fromFile = new File("D:\\data\\test\\newFile.txt");  File toFile = new File("D:\\data\\test2\\copyedFile.txt");  try(InputStream inStream = new FileInputStream(fromFile);      OutputStream outStream = new FileOutputStream(toFile);) {    byte[] buffer = new byte[1024];    int length;    while ((length = inStream.read(buffer)) > 0) {      outStream.write(buffer, 0, length);      outStream.flush();    }  }}

Java NIO中文件copy的方法,使用方式简单。当目标文件已经存在的时候会抛出FileAlreadyExistsException ,当源文件不存在的时候抛出NoSuchFileException,针对不同的异常场景给出不同的Exception,更有利于我们写出健壮性更好的程序。

@Testvoid testCopyFile2() throws IOException {  Path fromFile = Paths.get("D:\\data\\test\\newFile.txt");  Path toFile = Paths.get("D:\\data\\test2\\copyedFile.txt");  Files.copy(fromFile, toFile);}

如果在目标文件已经存在的情况下,你不想抛出FileAlreadyExistsException ,而是去覆盖它,也可以灵活的选择使用下面的选项

  • StandardCopyOption.REPLACE_EXISTING 来忽略文件已经存在的异常,如果存在就去覆盖掉它

//如果目标文件存在就替换它Files.copy(fromFile, toFile, StandardCopyOption.REPLACE_EXISTING);
  • StandardCopyOption.COPY_ATTRIBUTES copy文件的属性,最近修改时间,最近访问时间等信息,不仅copy文件的内容,连文件附带的属性一并复制

CopyOption[] options = { StandardCopyOption.REPLACE_EXISTING,      StandardCopyOption.COPY_ATTRIBUTES //copy文件的属性,最近修改时间,最近访问时间等};Files.copy(fromFile, toFile, options);

二、文件重命名

NIO中可以使用Files.move方法在同一个文件夹内移动文件,并更换名字。当目标文件已经存在的时候,同样会有FileAlreadyExistsException,也同样可以使用StandardCopyOption去处理该异常。

@Testvoid testRenameFile() throws IOException {  Path source = Paths.get("D:\\data\\test\\newFile.txt");  Path target = Paths.get("D:\\data\\test\\renameFile.txt");  //REPLACE_EXISTING文件存在就替换它  Files.move(source, target,StandardCopyOption.REPLACE_EXISTING);}

下文中的实现方法和上面代码的效果是一样的,resolveSibling作用是将source文件的父路径与参数文件名合并为一个新的文件路径。

resolve系列函数在windows和linux等各种系统处理路径分隔符号、路径与文件名合并等,比自己手写代码去处理不同操作系统的路径分隔符号、路径与文件名合并有更好的操作系统兼容性。

@Testvoid testRenameFile2() throws IOException {  Path source = Paths.get("D:\\data\\test\\newFile.txt");  //这种写法就更加简单,兼容性更好  Files.move(source, source.resolveSibling("renameFile.txt"));}

传统IO中使用File类的renameTo方法重命名,失败了就返回false,没有任何异常抛出。你不会知道你失败的原因是什么,是因为源文件不存在导致失败?还是因为目标文件已经存在导致失败?所以这种方法笔者不建议使用。

@Testvoid testRenameFile3() throws IOException {  File source = new File("D:\\data\\test\\newFile.txt");  boolean succeeded = source.renameTo(new File("D:\\data\\test\\renameFile.txt"));  System.out.println(succeeded);  //失败了false,没有异常}

三、文件剪切

文件剪切实际上仍然是Files.move,如果move的目标文件夹不存在或源文件不存在,都会抛出NoSuchFileException

@Testvoid testMoveFile() throws IOException {  Path fromFile = Paths.get("D:\\data\\test\\newFile.txt"); //文件  Path anotherDir = Paths.get("D:\\data\\test\\anotherDir"); //目标文件夹  Files.createDirectories(anotherDir);  Files.move(fromFile, anotherDir.resolve(fromFile.getFileName()),          StandardCopyOption.REPLACE_EXISTING);}

resolve函数是解析anotherDir路径与参数文件名进行合并为一个新的文件路径。

感谢各位的阅读,以上就是"java中文件拷贝剪切的方式有哪些"的内容了,经过本文的学习后,相信大家对java中文件拷贝剪切的方式有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0