Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅从目录中读取具有特定扩展名的文件_Java - Fatal编程技术网

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

例如,我有一个包含以下文件的目录:

  • 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("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修复了它。在我的测试中,我没有使用正则表达式编译,而是在运行时输入它。这可能就是我没有出错的原因。