2011-02-16 18 views
0

這裏是連接文件夾中所有文件的代碼。 它運作良好,但我修改它刪除連接後的文件,此功能不工作coze我不知道如何申報主要方法嘗試刪除與java連接後的文件

任何幫助將不勝感激非常感謝。

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(); 
    } 
    pw.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); 
     } 
    } 
    } 
} 
+0

如果您向我們顯示錯誤消息和堆棧跟蹤,我們可能會告訴您爲什麼您的應用程序無法正常工作。 – 2011-02-16 16:02:25

回答

0

我猜這是你從其他地方複製的東西。你兩次申報文件[]文件 - 第二次只是做

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); 
    } 
}  
0

你可以嘗試只移動你刪除你的第一個環......這樣,

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

是的,我從java教程複製它。我嘗試插入它 – user618111 2011-02-16 15:55:07

1

首先,確保你有足夠的權限可以刪除c:\target目錄中的內容。

其次,如果該目錄包含子目錄,則需要首先刪除每個子目錄中的所有文件,然後才能在子目錄上執行file.delete()。你可以做遞歸刪除這樣的: -

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

然後,您可以撥打deleteDirectory("C:/Target");來執行遞歸刪除。

+0

你是正確的刪除子目錄,但在OP的例子中,子目錄會導致連接循環炸燬。 – 2011-02-16 16:01:08