【问题标题】:Moving txt files to a folder instead of deleting them in java将txt文件移动到文件夹而不是在java中删除它们
【发布时间】:2011-07-01 14:34:49
【问题描述】:

我有一个代码来连接文件夹中的 txt 文件并将连接的文件移动到另一个文件夹中。 我的代码运行良好,但在连接它们后会删除文件,所以我想在连接它们后将这些文件移动到另一个文件夹。

我的 c:\source 中的文件必须移动到 c:\Archive

一开始是我的错误,我想移动文件但我删除了它们!! 当源文件夹中没有文件时,我想抛出异常。

所以我的代码是:

PrintWriter pw = new PrintWriter(new FileOutputStream("C:/Target/Filec.txt"));// directory where concatenated file are created

    File file = new File("C:/Source");// where files have to be concatenated and move to c:\Archive before deleting

    File[] files2 = file.listFiles();

    for (int i = 0; i < files2.length; i++)
    {

      File currentFile = files2[i];

      System.out.println("Processing " + currentFile.getPath() + "... ");

      BufferedReader br = new BufferedReader(new FileReader(currentFile));

      String line = br.readLine();

      while (line != null)
      {
        pw.println(line);
        line = br.readLine();
      }
      br.close();
      if (!currentFile.delete())
      {
        // Failed to delete file
        System.out.println("Failed to delete "+ currentFile.getName());
      }
    }
    pw.close();
    System.out.println("All files have been concatenated into Filec.txt");
    }
}

谢谢

【问题讨论】:

    标签: java file rename


    【解决方案1】:

    要移动文件,请使用source.renameTo(targetFile)

    如果源目录中没有文件,则listFiles() 将返回一个空数组,因此只需检查并抛出。

    此外,如果您只想盲目地连接不需要逐行读取的文件,只需打开 FileInputStream,将块读入 byte[] 并使用 FileOutputStream 写入。可能会更高效、更简单。

    【讨论】:

    • +1 表示不需要换行符来连接文件(当然,根据您的规范,在文件之间放置一个新行可能会更好。)
    • 非常感谢朋友们的快速回复;)
    【解决方案2】:

    您可以像这样移动文件:

    // File (or directory) to be moved
    File file = new File("filename");
    
    // Destination directory
    File dir = new File("directoryname");
    
    // Move file to new directory
    boolean success = file.renameTo(new File(dir, file.getName()));
    if (!success) {
        // File was not successfully moved
    }
    

    【讨论】:

    • 请注意,renameTo 仅在源目录和目标目录位于同一驱动器上时才有效。从一个驱动器移动到另一个驱动器需要 FileUtil.moveFile(...) 之类的东西;见@Zsolt。
    • 有趣 - 我不知道这一点。 FileUtil 在 jdk 中可用还是需要 commons jar?
    【解决方案3】:

    而不是 File.delete() 使用来自apache commonsFileUtils.moveFile()

    【讨论】:

    • +1 - 这是最通用的解决方案。如果源和目标位于不同的驱动器上,File.renameTo() 将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多