2015-04-30 36 views
0

在我的程序中,我試圖將我的輸出打印到一個文件中,但文件是空的。該程序讀取目錄中的文本文件。我得到所需的輸出到控制檯,但不在output.text文件中。不確定程序中缺少什麼。先謝謝您的幫助。如何讀/寫和合並多個.text文件的輸出並創建一個.txt文件?

import java.io.*; 

public class CacheData { 

    public static void main(String[] args) throws IOException { 
     String target_dir = "C:\\Files"; 
     String output = "C:\\Files\\output.txt"; 
     File dir = new File(target_dir); 
     File[] files = dir.listFiles(); 

     for (File textfiles : files) { 
      if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) { 
       BufferedReader inputStream = null; 

       try { 
        inputStream = new BufferedReader(new FileReader(textfiles)); 
        String line; 

        while ((line = inputStream.readLine()) != null) { 
         System.out.println(line); 


        PrintWriter outputStream = new PrintWriter(output); 
        outputStream.println(); 
        outputStream.close(); 
        } 

       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 

        } 
       } 
      } 
     } 
    } 

} 
+1

你打算打印什麼是'線'?如果是,將'line'傳遞給'outputStream.println()' – Robb

回答

0
    PrintWriter outputStream = new PrintWriter(output); 

        //you are not printing anything to output file. 
        outputStream.println(); 

        //Change it to 
        outputStream.println(line); 
        outputStream.close(); 
+0

當我使用這個建議進行更改時,輸出文件只包含1個字。我正在閱讀的文本文件包含數千個單詞。我能夠將輸出生成到控制檯,但不能寫入文件。 – FullNelson

0

一些修改你的代碼寫入文件。請參閱內嵌評論以獲取更多信息。

import java.io.*; 

public class CacheData { 
public static void main(String[] args) throws IOException { 
    String target_dir = "C:\\Files"; 
    String output = "C:\\Files\\output.txt"; 
    File dir = new File(target_dir); 
    File[] files = dir.listFiles(); 

    for (File textfiles : files) { 
     if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) { 
      BufferedReader inputStream = null; 

      try { 
       inputStream = new BufferedReader(new FileReader(textfiles)); 
       String line; 
       //open the Printwriter before your loop 
       PrintWriter outputStream = new PrintWriter(output); 
       while ((line = inputStream.readLine()) != null) { 
        System.out.println(line); 


       //Write Content not just linebreaks 
       outputStream.println(line); 

       } 
       //close the outputstream after the loop 
       outputStream.close(); 
      } finally { 
       if (inputStream != null) { 
        inputStream.close(); 

       } 
      } 
     } 
    } 
} 

} 

要寫在文件中的每個TXT的文件的內容,for循環之前移動的PrintWriter和for循環後,要關閉的PrintWriter而不僅僅是while循環。

+0

我做了您記下的更改,但我的輸出文件仍然爲空。 – FullNelson

+0

我正在閱讀的文本文件包含數千個單詞。我能夠將輸出生成到控制檯,但不能寫入文件。 – FullNelson

+0

就在關閉outputStream的outputStream調用flush()之前。 – daniel

0

看起來你想將多個文件(你的案例中的文本文件)的內容合併成一個文件。

這是IMO更簡單的解決方案。更簡單的是,您不必擔心在讀取或寫入時自己安全地打開和關閉文件。

public static void main(String[] args) throws Exception { 
    String targetDir = "Path to your directory of input files"; 
    String outputFile = "Path to your output file"; 

    File dir = new File(targetDir); 
    File[] files = dir.listFiles(new FilenameFilter() { 
     // Only get files that end with .txt 
     @Override 
     public boolean accept(File dir, String name) { 
      return name.toLowerCase().endsWith(".txt"); 
     } 
    }); 

    // Read all file lines into a List 
    List<String> inputFileLines = new ArrayList<>(); 
    for (File file : files) { 
     inputFileLines.addAll(Files.readAllLines(Paths.get(file.getAbsolutePath()))); 
    } 

    // Write the List to the console 
    for (String line : inputFileLines) { 
     System.out.println(line); 
    } 

    // Write the List to a single file 
    Files.write(Paths.get(outputFile), inputFileLines, StandardOpenOption.CREATE); 
} 
相關問題