2015-04-30 35 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); 
} 
相关问题