java - 遍历目录,读入文件,并将它们打印到 html 文件中

标签 java file-io iteration bufferedreader filewriter

我试图从 JfileChooser 选择一个目录,然后迭代该目录,读取所有文件并将它们全部写入一个大 HTML 文件中,以便于查看。以下是完成此操作的代码片段:

else if(arg0.getSource()==generate){
        //Create HTML report in same directory that file(s) came from
        try{

            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int returnval = fileChooser.showSaveDialog(this);
            if(returnval == JFileChooser.APPROVE_OPTION){
                File fileName = new File( "./report.html" );
                BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
                bw.write("<html>");
                bw.write("<body>");
                bw.write("<h1>Graded Assignment</h1>");
                bw.write("<p>");
                //for loop here that appends all the files in a directory
                File directory = new File(fileChooser.getSelectedFile().getAbsolutePath());
                for( File f : directory.listFiles() ){
                    FileInputStream fstream = new FileInputStream(f);
                    DataInputStream in = new DataInputStream(fstream);
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    bw.write(br.readLine() + "\n");
                }
                bw.write("</p>");
                bw.write("</body>");
                bw.write("</html>");

                bw.close();
                Desktop.getDesktop().browse(fileName.toURI());
            }
        }
        catch(FileNotFoundException fnf){
            fnf.printStackTrace();
        }
        catch(IOException io){
            io.printStackTrace();
        }

它将进入 for 循环,但不会在第一个文件中读取。我收到某种 AWT-EventQueue 错误。谁能重现这个并告诉我问题可能是什么?谢谢。

最佳答案

如评论中所示,您应该检查它是否是目录并采取适当的措施:

File directory = new File(fileChooser.getSelectedFile().getAbsolutePath());
  getFiles(directory);//calls method to get all the files in the directory
  ...
  void getFiles(File directory) {
            for( File f : directory.listFiles() ){
                if(!f.isDirectory()) {//is a file lets read it
                    FileInputStream fstream = new FileInputStream(f);
                    DataInputStream in = new DataInputStream(fstream);
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    bw.write(br.readLine() + "\n");
               }else {//wil make it a recursive search
                   getFiles(f);
               }
          }
    }

尽管我给出的方法也进行递归文件搜索,如果给定目录中有一个目录,它将遍历其所有目录获取所有文件

附录:

您应该使用:chooser.showOpenDialog(),而不是chooser.showSaveDialog(),请参阅此处的示例:

   JFileChooser chooser = new JFileChooser();
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int returnVal = chooser.showOpenDialog(parent);//this must be changed
    if(returnVal == JFileChooser.APPROVE_OPTION) {
       System.out.println("You chose to open this file: " +
            chooser.getAbsolutePath());
    }

引用文献:

关于java - 遍历目录,读入文件,并将它们打印到 html 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420547/

相关文章:

java - 更改 JTable 的外观

java - 解决间歇性垃圾收集问题 - Java

java - Xslt Saxon 处理器 - 目录中的所有文件

java - 我无法访问 TreeMap 中的 int[]

python - 迭代嵌套列表并更改值

c# - 在 C# .NET 2.0 中,反向执行 foreach 的简单方法是什么?

java - 输出文件不包含我从源复制的所有行

c - 读取为未缓存的直接 I/O 打开的文件的最后一个 block 不会产生 EOF,正常行为?

c - 有人可以告诉我我的错误吗?

python - 如何根据另一个变量中的连续值在变量上应用函数