#java #apache-commons-vfs
#java #apache-commons-vfs
Вопрос:
В моей работе quartz я хочу читать csv-файлы из каталога, используя commons-vfs.
try {
FileSystemManager fsManager = VFS.getManager();
final FileObject fileObject = fsManager.resolveFile(getJob().getDirectory());
if(fileObject.getType() != FileType.FOLDER) {
throw new FileTransferException("Invalid directory : " getJob().getDirectory());
}
final FileFilter fileFilter = new FileFilter() {
@Override
public boolean accept(FileSelectInfo fileInfo) {
try {
boolean isCSV = fileInfo.getFile().getName().getBaseName().endsWith(".csv");
logger.debug("TEST : {} {} " fileInfo.getFile().getName(), fileInfo.getFile().getType() , isCSV);
long fileTime = fileInfo.getFile().getContent().getLastModifiedTime();
return isCSV;
} catch (FileSystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
};
FileSelector selector = new FileFilterSelector(fileFilter);
FileObject[] findFiles = fileObject.findFiles(selector);
for (int i = 0; i < findFiles.length; i ) {
logger.info("Found {} : {}", i, findFiles[i]);
}
} catch(Exception e) {
throw new JobExecutionException(e);
}
В папке есть несколько файлов, но она выдает exeception, когда я хочу проверить дату файла и отфильтровать слишком старые файлы.
Он также показывает странный «воображаемый» тип файла — это реальный файл, который сам только что нашел:
18:13:27.807 DEBUG [AE-Scheduler_Worker-2][CsvImportJob]
TEST : imaginary false file:///e:/some_directory /not_csv.txt
org.apache.commons.vfs2.FileSystemException: Could not determine the last modified timestamp of "file:///e:/some_directory /not_csv.txt" because it does not exist.
at org.apache.commons.vfs2.provider.DefaultFileContent.getLastModifiedTime(DefaultFileContent.java:165)
Что я делаю не так?
Ответ №1:
Я нашел причину ошибки — ненужное пространство в конце имени каталога….