如果用词不当,请原谅。
基本上,我在一个servlet里有这样一行字------------------------------------------。
FileInputStream flinp = new FileInputStream("C:\\xampp\\img\\"+empid+".jpg");
其中empid是一个字符串。
所以目前我得到的文件名称是empid,但我需要得到名称中包含empid的任何地方的文件......所以例如,如果我的empid是2500,我需要得到文件,如果它被称为任何东西,比如---------。
等......谁能帮帮我?我是否需要使用regex,如果需要,我应该怎么写?谅谅
我试过了,但给我带来了一个错误-
FileInputStream flinp = new FileInputStream("C:\\xampp\\img\\"+.*?empid.*+".jpg");
EDIT -
另外,在我的jsp中,我有一个循环,里面有这一行,这样就可以将多个empid传给 "ReadImage "servlet,然后读取多个图片......不知道这是否会使我的问题有任何不同,但无论如何,我都要补充一下。
<img src='<%=request.getContextPath()%>/ReadImages?id<%=thisemp.getEmpGid()%>'
一个简单的解决方案,使用旧的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;
}
你需要使用一个FileVisitor来浏览文件系统的层次结构。 使用访问者和你生成的regex来过滤和收集符合你的标准的文件列表。
https:/docs.oracle.comjavase8docsapijavaniofileFileVisitor.html。
试着用以下方法找到所需文件 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();
你不能直接使用一个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() );