开发者

Trying to delete files after concatenation with java

here is a code to concatenate all files from a folder. it works well but i modified it to delete files after concatenation and this function is not working coze i don't know how to declare in main method

Any help will be appreciated thank you very much.

import java.io.*;
import java.io.File.*;

public class ConcatenatedFiles {

  static public void main(String arg[]) throws java.io.IOException {
    PrintWriter pw = new PrintWriter(new FileOutputStream("C:/Concatenated-file/concat.txt"));
    File file = new File("C:/Target");
    File[] files = file.listFiles();
    for (int i = 0; i < files.length; i++) {
      System.out.println("Processing " + files[i].getPath() + "... ");
      BufferedReader br = new BufferedReader(new FileReader(files[i]
                      .getPath()));
      String line = br.readLine();
      while (line != null) {
        pw.println(line);
        line = br.readLine();
      }
      br.close();
    }
    p开发者_如何学JAVAw.close();
    System.out.println("All files have been concatenated into concat.txt");

     File directory = new File("C:/Target");

    // Get all files in directory
    File[] files = directory.listFiles();
    for (File file : files)
    {
       // Delete each file
       if (!file.delete())
       {
         // Failed to delete file
         System.out.println("Failed to delete "+file);
       }
    }
  }
}


First, make sure you have enough permission to be able to delete the contents in c:\target directory.

Second, if that directory contains subdirectories, you will need to delete all the files in each subdirectory first before you can perform a file.delete() on the subdirectory. You can do recursive deletion like this:-

public boolean deleteDirectory(File path) {
    if (path.exists()) {
        for (File file : path.listFiles()) {
            if (file.isDirectory()) {
                deleteDirectory(file);
            }
            else {
                file.delete();
            }
        }
    }
    return path.delete();
}

Then, you can call deleteDirectory("C:/Target"); to perform the recursive deletion.


I am guessing this is something you copied from elsewhere. You declare File[] files twice - the second time just do

File directory = new File("C:/Target");

// Get all files in directory
files = directory.listFiles();
for (File toDelete : files)
{
   // Delete each file
   if (!toDelete.delete())
   {
       // Failed to delete file
       System.out.println("Failed to delete "+toDelete);
   }
}     


You could try just moving your delete to your first loop... like this,

import java.io.*;
import java.io.File.*;

public class ConcatenatedFiles {

  static public void main(String arg[]) throws java.io.IOException {
    PrintWriter pw = new PrintWriter(new FileOutputStream("C:/Concatenated-file/concat.txt"));
    File file = new File("C:/Target");
    File[] files = file.listFiles();
    for (int i = 0; i < files.length; i++) {
      File currentFile = files[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 concat.txt");
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜