我尝试从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错误。有没有人能重现这段视频,告诉我问题出在哪里?谢谢。
发布于 2012-07-11 05:04:51
在注释中,你应该检查它是否是一个目录,并采取适当的行动:
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());
}参考:
https://stackoverflow.com/questions/11420547
复制相似问题