通过java IO生成输出文件

时间:2012-06-29 03:19:09

标签: java io

我开发了一个java代码,用于从用户选择的文件夹中读取文件。它显示每个文件中有多少行代码,它只读取.java文件,最终结果显示在控制台上,我认为输出将显示在控制台上,但同时还有一个文本文件,用于获取相同的信息也存储在桌面上,请告知如何以及生成的文件的名称是基于时间戳让我们假设输出文件的名称将是“output06282012”,并且该文本文件应该包含相同的信息在控制台上显示,这是我的代码......

public static void main(String[] args) throws FileNotFoundException {

        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new java.io.File("C:" + File.separator));
        chooser.setDialogTitle("FILES ALONG WITH LINE NUMBERS");
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.setAcceptAllFileFilterUsed(false);
                if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {      Map<String, Integer> result = new HashMap<String, Integer>();
             File directory = new File(chooser.getSelectedFile().getAbsolutePath()); 
             int totalLineCount = 0;
             File[] files = directory.listFiles(new FilenameFilter(){
                  @Override
                  public boolean accept(File directory, String name) {
                      if(name.endsWith(".java"))
                      return true;
                    else
                      return false;              
                  }
                }
   );
              for (File file : files)
            {
                if (file.isFile())
                {    Scanner scanner = new Scanner(new FileReader(file));
                    int lineCount = 0;
                     try
                    { for (lineCount = 0; scanner.nextLine() != null; lineCount++) ;
                          } catch (NoSuchElementException e)
                    {   result.put(file.getName(), lineCount);
                    totalLineCount += lineCount;  
                                    }


                } }
              System.out.println("*****************************************");
              System.out.println("FILE NAME FOLLOWED BY LOC");
              System.out.println("*****************************************");

            for (Map.Entry<String, Integer> entry : result.entrySet())
            {   System.out.println(entry.getKey() + " ==> " + entry.getValue());
            }
            System.out.println("*****************************************");
            System.out.println("SUM OF FILES SCANNED ==>"+"\t"+result.size()); 
            System.out.println("SUM OF ALL THE LINES ==>"+"\t"+ totalLineCount);

             }     

    }

现在我心中的想法就是这个逻辑

1)构建您要使用的文件名

2)打开文件进行写入

3)每次调用System.out.println()时,进行类似的调用以将相同的消息写入文件

4)完成所有操作后,请确保关闭文件句柄。

我有一个像这样的粗略想法

try{

 java.util.Date date= new java.util.Date();
 System.out.println(new Timestamp(date.getTime())); 

BufferedWriter out = new BufferedWriter(new FileWriter("C://Desktop//output"+new Timestamp(date.getTime())+".txt"));

out.write("some information");

out.close; 

}catch(IOException e){
  e.printStackTrace();
 }

请告知如何以及如何生成其生成的文件的名称将基于时间戳,假设输出文件的名称将为“output06282012”,并且该文本文件应包含显示的相同信息在控制台上

1 个答案:

答案 0 :(得分:1)

据我所知,这是你实际要问的唯一事情:

  

请告知如何操作,并且生成其名称的文件的名称将基于时间戳。让我们假设输出文件的名称是'output06282012'...

简单的答案是:

    String fileName = "output" + new Date().getTime();

然后你继续说:

  

....该文本文件应包含控制台上显示的相同信息

你有两个选择:

  • 您可以通过调用System.out 更改<{em> System.setOut(...)转到的地方。 (查看javadoc了解详细信息。)

  • 您可以为文件流创建PrintWriterPrintStream包装,然后写入,而不是写入System.out

在我看来,除非你别无选择,否则使用System.setOut(...)是一个坏主意。这是一个影响整个应用程序的“全局操作”。最好传递要用作参数的编写器...


  

你能不能像我所做的那样播种代码,这将清除理解

抱歉,我不会为他们写人的程序(除非这是一个有趣的问题!)。您需要使用相关javadoc中提供的信息自行编写和调试代码。您可以在Oracle网站上在线找到Java文档:http://docs.oracle.com/javase/7/docs/