【发布时间】:2021-04-12 14:23:17
【问题描述】:
我需要从具有以下扩展名的文件夹(文件)中的每个文件中提取字符串部分,例如 png、jpg、jpeg、PNG、JPG、JPEG。 文件命名约定如下(这是 2 个不同的文件,但它们唯一的共同点是获取 FILENAME 所需的 TIMESTAMP:
AIRLINECODE_PARTNERCODE_INVOICENO_timestamp.FILETYPE FILENAME.FILETYPE_timestamp
示例文件名:
ET_PRH_4_20170309140404.png
gosalyn.png_20170309140404
从第一个读取字段后,我需要将每个大写字段写入数据库(例如 AIRLINECODE、PARTNERCODE 到 db 中的列)。 以下是我到目前为止编写的代码,请您指导我如何从这里开始。您的帮助将不胜感激。我只需要拆分和存储部分的帮助。谢谢
import java.io.File;
import java.io.FilenameFilter;
public class Pathnames {
public void readFilename() {
// try-catch block to handle exceptions
try {
File f = new File("C:\\Users\\rsaeed\\Desktop\\files");
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File f, String name) {
return name.endsWith(".png") || name.endsWith(".PNG") || name.endsWith(".jpg") || name.endsWith(".JPG") || name.endsWith(".jpeg") || name.endsWith(".JPEG");
}
};
// using a File class as an array
File[] files = f.listFiles(filter);
if(files != null) {
for(File eachFile : files) {
String[] partsOfName = eachFile.split("_"); // this part is wrong. I am stuck here
}
}
// Get the names of the files by using the .getName() method
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
public static void main(String args[]) {
Pathnames p = new Pathnames();
p.readFilename();
}
}
【问题讨论】:
-
您遇到的“具体”问题是什么?
-
@OldProgrammer 我可以从文件夹中获取文件名,但是对于每个文件,我需要根据上面描述的内容将其拆分并将其写入数据库。稍后会先写入 db 部分,我需要拆分并存储特定字段(大写的字段)。
-
@OldProgrammer 你明白了吗,还是你认为我需要进一步解释?
-
所以您只对大写字母感兴趣?它们可以在字符串中出现多次吗?还是他们总是在开始?
-
也许您可以使用模式来提取部分,第 1 组具有大写文件名,您可以在
_上拆分并检查第 2 组和第 3 组是否存在并获取时间戳^([A-Z]+(?:_[A-Z]+)*).*(?:_(\d+)\.(?:png|jpe?g|PNG|JPE?G)|\.(?:png|jpe?g|PNG|JPE?G)_(\d+))$见@ 987654321@