使用文件的输入流提取文件的创建日期时间和上次修改日期时间。我无法使用 Tika 的元数据类获取它



我有一些文件将是电子邮件附件或zip附件。这意味着我有文件流,而不是文件或其实际路径。我需要使用文件的InputStream获取文件的创建日期时间和上次修改日期时间。我尝试了来自apache tika的元数据,它没有给我这两个东西,但是我可以在文件属性中看到这两个属性。此外,我还可以使用BasicFileAttribute获取相同文件的创建日期时间和修改日期时间。但是BasicFileAttribute将适用于文件路径,而不适用于文件流。考虑下面的场景-

我有一个文件,比如myTestFile.txt对于这个文件,我可以在文件属性中看到createdDateTime和modifiedDateTime。我可以使用BasicFileAttribute获得这两个数据。但对于同一个文件,当我使用Apache tike元数据与文件流进行解析以获得createdDateTime和lastmodifiedDateTime时,它没有给出这两个日期中的任何一个。

我需要用流而不是文件或文件路径来获得createdDateTime和lastModifiedDateTime的解决方案,因为在生产环境中,我只有流,而没有实际的文件或文件的路径。

感谢

我得到了解决方案。我使用Parser类解析文件的输入流,以提取metadata类中文件的元数据,对于少数文件,它将创建日期时间和上次修改的日期时间返回为null。

然而,当我尝试使用Tika类而不是Parser类(这两个类都是来自apache Tika的类(解析文件的输入流时,这对我来说很有效,我现在可以获得所有的元数据了。

下面的代码是我以前的方法,它没有给我创建的、最后修改的日期时间。

public void fetchMetaData(InputStream inputStream) {
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
ParseContext pcontext = new ParseContext();
try {
Parser parser = new AutoDetectParser();
parser.parse(inputStream, handler, metadata, pcontext);
System.out.println("creation date from metadata " + metadata.get("dcterms:created"));
System.out.println("modified date from metadata " + metadata.get("dcterms:modified"));
//Below loop will get all the metadata keys available in the metadata and will print the values assigned to these keys
for (String key : metadata.names()) {
System.out.println(key + " = " + metadata.get(key));
}
} catch (TikaException | SAXException | IOException ex) {
ex.printStackTrace();
}
}

下面是行之有效的解决方案。

public void fetchMetaData(InputStream inputStream){
try {
Tika tika = new Tika();
Metadata metadata = new Metadata();
tika.parse(inputStream, metadata);
System.out.println("creation date from metadata "+metadata.get("dcterms:created"));  //created date time
System.out.println("modified date from metadata "+metadata.get("dcterms:modified")); //last modified date time

for(String key : metadata.names())
System.out.println(key+" = "+metadata.get(key));
} catch (IOException ex) {
ex.printStackTrace();
}

}

最新更新