Java 使用扫描仪从不同目录读取多个文本文件
我试图从一个文件夹中读取多个文本文件,但我得到了一个奇怪的结果,也许你可以帮助我理解它。所以Java 使用扫描仪从不同目录读取多个文本文件,java,file,java.util.scanner,Java,File,Java.util.scanner,我试图从一个文件夹中读取多个文本文件,但我得到了一个奇怪的结果,也许你可以帮助我理解它。所以 File folder; int result; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("choosertitle");
File folder;
int result;
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("choosertitle");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//
// disable the "All files" option.
//
chooser.setAcceptAllFileFilterUsed(false);
//
if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) {
System.out.println("getSelectedFile() : "
+ chooser.getSelectedFile());
folder = chooser.getSelectedFile();
Scanner in = null;
for (File fileEntry : folder.listFiles()) {
try {
in = new Scanner(new File(fileEntry.getName()));
} catch (FileNotFoundException e1) {
}
String CompositionName = in.next();
String Composer = in.next();
in.next();
String Duration = in.next();
parent.model.addRow(new Object[] { "", Composer,
CompositionName, TrackNumber, Duration });
in = null;
}
}
使用此方法,我只能读取文件夹的第一个文件;在第二个循环中,即使文件名是正确的。这种方法有效,但我听说这不是一种好的做法
File folder;
int result;
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("choosertitle");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//
// disable the "All files" option.
//
chooser.setAcceptAllFileFilterUsed(false);
//
if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) {
System.out.println("getSelectedFile() : "
+ chooser.getSelectedFile());
folder = chooser.getSelectedFile();
Scanner in = null;
for (File fileEntry : folder.listFiles()) {
try {
System.out.println(fileEntry.getName());
in=null;
in = new Scanner(new File(folder.getAbsolutePath()+"\\"+fileEntry.getName()));
} catch (FileNotFoundException e1) {
}
String CompositionName = in.next();
String Composer = in.next();
in.next();
String Duration = in.next();
parent.model.addRow(new Object[] { "", Composer,
CompositionName, TrackNumber, Duration });
}
}
谢谢。您试过这个吗:
in = new Scanner(fileEntry);
您正在尝试仅使用文件名实例化该文件。除非设置文件的环境,否则将失败(因为文件实例需要有效的引用) 从-: 它需要一个用于父目录的文件(在您的示例中是
文件夹
),以及一个用于子目录名称的字符串(是fileEntry.getName()
)
正如另一个答案所说
new Scanner(fileEntry)
我会工作的,我也会
new Scanner(new File(fileEntry.getAbsolutePath())
最后
new Scanner(new File(folder, fileEntry.getName())
也可以。您能解释一下为什么第一个文件扫描正确吗?谢谢。老实说,我不确定。我会在
FileNotFoundException
子句中插入一个System.out.println(fileEntry.getName())
,看看发生了什么。