我需要获取扩展名为absolute file path
的所有.pdf
个文件。我使用下面提到的代码,但我只能获得一个文件的绝对文件路径。
如何修改代码以获取所有绝对文件路径?
public class FindFiles {
String absoluteFilePath = "";
String fileName;
public String PdfFiles(String parentDirectory, String fileExtension) {
FileFilter fileFilter = new FileFilter(fileExtension);
File parentDir = new File(parentDirectory);
// Put the names of all files ending with .pdf in a String array
String[] listOfTextFiles = parentDir.list(fileFilter);
if (listOfTextFiles.length == 0) {
System.out.println("There are no files in this direcotry!");
}
for (String file : listOfTextFiles) {
//construct the absolute file paths...
absoluteFilePath = new StringBuffer(parentDirectory).append(File.separator).append(file).toString();
fileName = file.toString();
}
return absoluteFilePath;
}
public static void main(String args[]) {
FindFiles f = new FindFiles();
f.PdfFiles("", "");
}
}
答案 0 :(得分:1)
你每次都在循环中覆盖absoluteFilePath
;
试试
absoluteFilePath += new StringBuffer(parentDirectory).append(File.separator).append(file).toString();
答案 1 :(得分:0)
不要打扰,请使用java.nio.file:
final Path dir = Paths.get(baseDir).toAbsolutePath();
final String filter = "*." + extension;
final List<Path> ret = new ArrayList<>();
try (
final DirectoryStream<Path> dirstream
= Files.newDirectoryStream(dir, filter);
) {
for (final Path entry: dirstream)
ret.add(entry);
}
return ret;
如果您使用Java 8,那就更简单了。
答案 2 :(得分:0)
可以使用java.nio包中的类来提供更有效的问题解决方案。
E.g。要检查文件是否是pdf文件,请使用Files.probeContentType(Path path)
。
不要编写循环来访问这些目录中的所有目录和文件,而是使用Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)
使用这些类的问题的解决方案是
public class FindPdfFiles {
public static void main(String[] args) throws IOException{
final Path path = Paths.get("C:\\SearchDirectoryForPDF");
Files.walkFileTree(path, new FindPdfFilesFilter());
}
}
class FindPdfFilesFilter extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes arg1)
throws IOException {
final String mimeTypeOfFile = Files.probeContentType(path);
if(mimeTypeOfFile != null && !mimeTypeOfFile.isEmpty() && mimeTypeOfFile.toLowerCase().contains("pdf")) {
System.out.println(path.toString());
}
return FileVisitResult.CONTINUE;
}
}