Java 如何仅从目录中读取具有特定扩展名的文件
例如,我有一个包含以下文件的目录:Java 如何仅从目录中读取具有特定扩展名的文件,java,Java,例如,我有一个包含以下文件的目录: test.log test.html test.txt 我想知道如何让我的java程序只选择并读取扩展名为.log的文件 File file=new File("C:/Temp/"); String name,tok[]; for(File temp:file.listFiles()){ name=temp.toString(); tok=name.split("\\."); if(tok[tok.length-1].equals("l
File file=new File("C:/Temp/");
String name,tok[];
for(File temp:file.listFiles()){
name=temp.toString();
tok=name.split("\\.");
if(tok[tok.length-1].equals("log")){
//compute
}
}
因为文件名总是在更改,我想跟踪并读取扩展名为.log的文件
File file=new File("C:/Temp/");
String name,tok[];
for(File temp:file.listFiles()){
name=temp.toString();
tok=name.split("\\.");
if(tok[tok.length-1].equals("log")){
//compute
}
}
有什么想法吗?试试这个
public boolean accept(File file) {
return file.getName().toLowerCase().endsWidth(".log");
}
请尝试以下代码:
File file=new File("path.log");
String name=file.toString();
String tok[]=name.split("\\.");
if(tok[tok.length-1].equals("log")){
//compute
}
以上是检查扩展是否为log
的核心逻辑。下面的代码是迭代目录并查找扩展名为log
的文件
File file=new File("C:/Temp/");
String name,tok[];
for(File temp:file.listFiles()){
name=temp.toString();
tok=name.split("\\.");
if(tok[tok.length-1].equals("log")){
//compute
}
}
有关
文件的详细信息,请访问链接。您可以使用简单的正则表达式来匹配文件的扩展名:
if(file.toString().matches(".*\\.log"))
{
//Process the file
}
我使用(通配符文件过滤器)
File dir=新文件(“/path/to/directory”);
FileFilter FileFilter=新的通配符FileFilter(“*.log”);
File[]files=dir.listFiles(fileFilter);
对于(int i=0;i
请参见以下代码片段
Path path = Paths.get("resources/");
try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(path, "*.{zip,txt}")) {
for (Path entry : dirStream) {
System.out.printf("%-5s: %s%n", "entry", entry.getFileName());
}
} catch (IOException e) {
e.printStackTrace(System.err);
}
Path Path=Path.get(“resources/”);
try(DirectoryStream dirStream=Files.newDirectoryStream(路径“*。{zip,txt}”)){
for(路径条目:dirStream){
System.out.printf(“%-5s:%s%n”,“entry”,entry.getFileName());
}
}捕获(IOE异常){
e、 printStackTrace(System.err);
}
有关更多详细信息,请查看此完整示例:
看,这应该对您有所帮助。要比较stings,您必须使用equals
而不是=
那么,如果文件名为foo.log.txt呢?顺便说一句,split(“.”)并不像你想象的那样。你应该删除第一部分,这显然是错误的。accept方法的主体应该重写为return file.getName().toLowerCase().endsWidth(“.log”)代码>@Suganthan@JBNizet试图告诉我们的是:该方法可以工作。因此,第一部分是错误的,没有必要的。第二部分写为if()返回true/*else*/返回false代码>。这可以而且应该写为一个简单的返回代码>。这更具可读性。既然只需要endsWith()
,为什么还要使用正则表达式呢?顺便说一句,你的反斜杠需要转义。不,你没有。甚至没有编译:非法转义字符。@user3189142是的,他肯定!此代码段未编译(因为未转义的反斜杠)。@JBNizet修复了它。在我的测试中,我没有使用正则表达式编译,而是在运行时输入它。这可能就是我没有出错的原因。