我想从java中的文件夹中读取多个csv文件。所有文件都是csv并且格式相同,但问题是我得到的文件夹的路径是这样的。
> conf/files
这是我所有csv文件所在的文件夹。我有一个程序,当路径给出时读取单个文件,如
> conf/files/sample.csv
如果我能得到这样的文件名列表,我可以阅读所有这些。请帮忙......
答案 0 :(得分:2)
List<String> filenames = new LinkedList<String>();
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
if(fileEntry.getName().contains(".csv"))
filenames.add(fileEntry.getName())
}
}
}
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
这样,只需循环遍历文件名列表,并访问您已经知道的方式
答案 1 :(得分:0)
如果您使用FileFilter
或FileNameFilter
,您可以获取以后迭代的文件列表,也可以对accept方法中的每个文件执行某些操作。
String path = "conf/files";
File [] files = new File(path).listFiles(new FileFilter() {
@Override
public boolean accept(File path) {
if(path.isFile()) {
//Do something with a single file
//or just return true to put it in the list
return true;
}
return false;
}
});
//Do something with the list of files
答案 2 :(得分:0)
使用lambda表达式可以在一行中实现解决方案:
File [] files = new File("path/to/folder/").listFiles(obj -> obj.isFile() && obj.getName().endsWith(".csv"));
答案 3 :(得分:-1)
Another way to read all .csv file in your folder directory by directory.
String inputFolder = "E:\\CSVFiles\\take";//input path where you read the file
File folder = new File(inputFolder);
List<String> listOfFiles=listDirectory(folder, 0); //0 is the level where we start reading
//This method for Reading the file in directory manner(folder under folder all the csv)
private static List<String> listDirectory(File file, int level) {
List<String> lstFiles = new ArrayList<String>();
File[] firstLevelFiles = file.listFiles();
if (firstLevelFiles != null && firstLevelFiles.length > 0) {
for (File aFile : firstLevelFiles) {
if (aFile.isDirectory() && !"ProcressedEMLs".equalsIgnoreCase(aFile.getName())
&& !"FailedEMLs".equalsIgnoreCase(aFile.getName())) {
lstFiles.addAll(listDirectory(aFile, level + 1));
} else if (!aFile.isDirectory()) {
if (aFile.toString().toLowerCase().endsWith(".csv")) {
lstFiles.add(aFile.getAbsolutePath());
}
}
}
}
firstLevelFiles = null;
return lstFiles;
}