当前位置: 首页 > 知识库问答 >
问题:

解析文件名提取Java中的字符串部分

宰父才
2023-03-14

我需要从文件夹(文件)中的每个文件提取字符串部分,其扩展名如下:png,jpg,jpeg,png,jpg,jpeg。文件命名约定如下(这是两个不同的文件,但它们唯一的共同点是获取文件名所需的时间戳:

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();
    }
}

共有1个答案

陈和裕
2023-03-14

您需要在文件名上调用split方法,而不是在file对象上调用。
拆分时,请使用_.,这样文件扩展名也会分开:

String fileName = "ET_PRH_4_20170309140404.png";
String[] parts = fileName.split("_|\\.");
System.out.println(Arrays.toString(parts));

输出:

[ET, PRH, 4, 20170309140404, png]

现在,您可以轻松地从数组中获取部分。
有关模式的更多信息,请参阅模式类文档。

 类似资料:
  • 问题内容: 在Java中执行以下操作的最佳方法是什么。我有两个输入字符串 我需要从字符串中提取类型和数字。 在这种情况下,答案是type =“ a good”和number =“ 234” 谢谢 问题答案: 您可以使用正则表达式:

  • 问题内容: 提取像这样的字符串的整数部分的最佳方法是什么 您如何获得123部分。您可以使用Java的Scanner对其进行破解,还有更好的方法吗? 问题答案: 为什么不只使用正则表达式来匹配所需的字符串部分? 这就是您所需要的,再加上所有需要的字符。 查看http://www.regular-expressions.info/tutorial.html,了解正则表达式的工作原理。 编辑:我想说的是

  • 问题内容: 您如何解析存储在Java字符串对象中的xml? Java的XMLReader仅从URI或输入流中解析XML文档。无法从包含xml数据的字符串进行解析? 现在,我有以下内容: 在我的处理程序上,我有这个: 提前致谢 问题答案: 该SAXParser的可以读取的的InputSource。 一个 InputSource的 可以采取 读者 在其构造 因此,您可以通过StringReader来解

  • 问题内容: 我想解决以下条件字符串。因为我想在我的项目中支持动态条件。 我期望的程序是 更新: 我不尝试解析数学方程式,如下所示 问题答案: 从Java 1.6开始,如果您足够使用和/或不想引入其他库,则可以使用and评估 javascript 。 输出量

  • 问题内容: 我有以下字符串; 等级,用户名和消息的字符每次都不同。将其分为三个独立变量(用户名,等级和消息)的最佳方法是什么? 我已经尝试过: 但这会抛出错误。提前致谢! 问题答案: 使用Java对正则表达式()的支持,并让正则表达式匹配这三个部分。 例如这个: Java代码段,略微改编自Ian F. Darwin的“ Java Cookbook”(O’Reilly): 输出:

  • 问题内容: 我有一个Java 对象。我只需要从中提取数字。我举一个例子: 我想要 是否有仅提取数字的库函数? 感谢你的回答。在尝试这些库之前,我需要知道是否必须安装任何其他库? 问题答案: 你可以使用正则表达式并删除非数字。