含有字符串的文件名的Regex在任何地方的Java

问题描述 投票:1回答:2

如果用词不当,请原谅。

基本上,我在一个servlet里有这样一行字------------------------------------------。

FileInputStream flinp = new FileInputStream("C:\\xampp\\img\\"+empid+".jpg");

其中empid是一个字符串。

所以目前我得到的文件名称是empid,但我需要得到名称中包含empid的任何地方的文件......所以例如,如果我的empid是2500,我需要得到文件,如果它被称为任何东西,比如---------。

  • 2500_Amy
  • Amy_2500
  • Amy2500
  • 2500Amy

等......谁能帮帮我?我是否需要使用regex,如果需要,我应该怎么写?谅谅

我试过了,但给我带来了一个错误-

FileInputStream flinp = new FileInputStream("C:\\xampp\\img\\"+.*?empid.*+".jpg");

EDIT -

另外,在我的jsp中,我有一个循环,里面有这一行,这样就可以将多个empid传给 "ReadImage "servlet,然后读取多个图片......不知道这是否会使我的问题有任何不同,但无论如何,我都要补充一下。

<img src='<%=request.getContextPath()%>/ReadImages?id<%=thisemp.getEmpGid()%>'

java regex string servlets
2个回答
1
投票

一个简单的解决方案,使用旧的java IO(我推断是使用 FileInputStream)可能是。

public static void main(String[] args) throws FileNotFoundException {
    String dirName = "c:/stuff";
    File directory = new File(dirName);
    String[] pathnames = directory.list();

    FileInputStream fis = findFirstMatching(dirName, pathnames, "38");
    if (fis != null) {
        //your code
    }
}

static FileInputStream findFirstMatching(String dirname, String[] pathnames, String empId) throws FileNotFoundException {
    for (String pathname : pathnames) {
        if (Pattern.matches(".*" + empId + ".*", pathname)) {
            return new FileInputStream(dirname + "/" + pathname);
        }
    }
    return null;
}

2
投票

你需要使用一个FileVisitor来浏览文件系统的层次结构。 使用访问者和你生成的regex来过滤和收集符合你的标准的文件列表。

https:/docs.oracle.comjavase8docsapijavaniofileFileVisitor.html。


0
投票

试着用以下方法找到所需文件 Files.walk(...):

var nameRegEx = ".*" + epid + ".*.jpd";
Optional<Path> path = Files.walk(Paths.get("C:\\xampp\\img\\"))
            .filter(Files::isRegularFile)
            .filter(p -> p.toFile().getName().matches(nameRegEx))
            .findFirst();

0
投票

你不能直接使用一个regex到一个 FileInputStream然而,你可以阅读所有的文件,然后过滤出所需的一次,像下面。如果阅读所有可以在你的情况下完成。

File folder = new File( "/user/folder/" ); // Base folder where you have all the files
List<File> collectedFiles = Arrays.stream( folder.listFiles() )
                                  .filter( file -> file.getName().contains( "1525" ) ) // Check if filename as your employee number
                                  .collect( Collectors.toList() ); // Get all the filtered files as a list

另一种方法是使用 FileNameFilter

FilenameFilter filter = ( dir, name ) -> name.contains( "1525" );
File folder = new File( "/user/folder/" ); // Base folder where you have all the files
List<File> collectedFiles = Arrays.stream( folder.listFiles(filter) )
                                  .collect( Collectors.toList() );
© www.soinside.com 2019 - 2024. All rights reserved.