Java-读取文件夹中的所有.txt文件
比如说,我有一个名为Java-读取文件夹中的所有.txt文件,java,bufferedreader,Java,Bufferedreader,比如说,我有一个名为maps的文件夹,在maps中我有map1.txt、map2.txt、和map3.txt。如何使用Java和BufferReader读取文件夹maps中的所有.txt文件(如果可能的话)?下面的内容应该可以帮助您,请注意,为了简单起见,我使用apache commons FileUtils而不是混用缓冲区和流 File folder = new File("/path/to/files"); File[] listOfFiles = folder.listFiles();
maps
的文件夹,在maps
中我有map1.txt
、map2.txt、
和map3.txt
。如何使用Java和BufferReader
读取文件夹maps
中的所有.txt
文件(如果可能的话)?下面的内容应该可以帮助您,请注意,为了简单起见,我使用apache commons FileUtils而不是混用缓冲区和流
File folder = new File("/path/to/files");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
if (file.isFile() && file.getName().endsWith(".txt")) {
String content = FileUtils.readFileToString(file);
/* do somthing with content */
}
}
File folder=新文件(“/path/to/files”);
File[]listOfFiles=folder.listFiles();
for(int i=0;i
我会将@Andrew White answer(+1 BTW)更进一步,并建议您使用FileNameFilter仅列出相关文件:
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
};
File folder = new File("/path/to/files");
File[] listOfFiles = folder.listFiles(filter);
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
String content = FileUtils.readFileToString(file);
// do something with the file
}
FilenameFilter=newfilenamefilter(){
公共布尔接受(文件目录,字符串名称){
返回名称.endsWith(“.txt”);
}
};
文件夹=新文件(“/path/to/files”);
File[]listOfFiles=folder.listFiles(过滤器);
for(int i=0;i
我认为这是从地图和子文件夹中读取所有.txt文件的好方法
private static void addfiles (File input,ArrayList<File> files)
{
if(input.isDirectory())
{
ArrayList <File> path = new ArrayList<File>(Arrays.asList(input.listFiles()));
for(int i=0 ; i<path.size();++i)
{
if(path.get(i).isDirectory())
{
addfiles(path.get(i),files);
}
if(path.get(i).isFile())
{
String name=(path.get(i)).getName();
if(name.lastIndexOf('.')>0)
{
int lastIndex = name.lastIndexOf('.');
String str = name.substring(lastIndex);
if(str.equals(".txt"))
{
files.add(path.get(i));
}
}
}
}
}
if(input.isFile())
{
String name=(input.getName());
if(name.lastIndexOf('.')>0)
{
int lastIndex = name.lastIndexOf('.');
String str = name.substring(lastIndex);
if(str.equals(".txt"))
{
files.add(input);
}
}
}
}
私有静态void addfiles(文件输入、ArrayList文件)
{
if(input.isDirectory())
{
ArrayList path=newArrayList(Arrays.asList(input.listFiles());
对于(int i=0;i0)
{
int lastIndex=name.lastIndexOf('.');
String str=name.substring(lastIndex);
如果(str.equals(“.txt”))
{
add(path.get(i));
}
}
}
}
}
if(input.isFile())
{
字符串名称=(input.getName());
如果(name.lastIndexOf('.')>0)
{
int lastIndex=name.lastIndexOf('.');
String str=name.substring(lastIndex);
如果(str.equals(“.txt”))
{
文件。添加(输入);
}
}
}
}
如果您想使用新的java.nio api实现这一点,那么这就是从
路径目录=。。。;
try(DirectoryStream)=
Files.newDirectoryStream(dir,“*.txt”)){
for(路径条目:流){
System.out.println(entry.getFileName());
}
}捕获(IOX异常){
//IOException永远不能由迭代引发。
//在这个代码段中,它只能//由newDirectoryStream抛出。
系统错误println(x);
}
如果所有文件都在一个目录中,则仅使用JDK:
File dir = new File("path/to/files/");
for (File file : dir.listFiles()) {
Scanner s = new Scanner(file);
// do something with file
s.close();
}
要排除文件,可以使用
listFiles(FileFilter)
和NIO
执行以下操作:
Files.walk(Paths.get("/path/to/files"))
.filter(Files::isRegularFile)
.filter(path -> path.getFileName().toString().endsWith(".txt"))
.map(FileUtils::readFileToString)
// do something
要读取文件内容,可以使用
Files#readString
,但通常需要在lambda表达式中处理IOException
。Ah。谢谢但需要注意的是:如果所有文件都命名为mapNUMBER.txt,是否会更易于管理?与map3.txt、map4.txt等中的代码一样,此代码不会按原样工作,因为第6行中没有使用变量“file”的声明。不知道为什么要这样写,也许它应该是更伪代码的样式,但是file应该被listOfFiles[i]替换,或者如果要使用file变量,就应该声明file变量。请注意,for(file-file:folder.listFiles())
的长度要短得多,效果也更好@Dolda2000同意了,我真的不知道为什么我会这样回答。也许我拉了一个现有的例子。@Shahryar这不是一个多余的答案,这是一个不同的、有效的答案。@KennyCason,在我看来,这和前面的答案一样!使用FileNameFilter有什么好处?@Shahryar是的,这在我看来是一个同等的、可能更干净的例子。了解其他
解决方案的存在也很好。您将看到,对于一个问题,有许多相似但不同的解决方案。@KennyCason“知道其他解决方案的存在也很好”好话:-)这比其他答案有任何改进吗?或者for each只是一个语法首选项?它的作用是相同的,唯一的区别是它是干净的,代码更少。try/catch与try/catch可能重复?
File dir = new File("path/to/files/");
for (File file : dir.listFiles()) {
Scanner s = new Scanner(file);
// do something with file
s.close();
}
Files.walk(Paths.get("/path/to/files"))
.filter(Files::isRegularFile)
.filter(path -> path.getFileName().toString().endsWith(".txt"))
.map(FileUtils::readFileToString)
// do something