目前我的任务是使用Java创建一个工具,可以检查链接是否正确。该链接由Jericho HTML解析器提供,我的工作只是检查文件是否存在/链接是否正确。这部分已经完成,难点在于优化代码,因为我的程序运行速度相对较慢,每次运行需要65毫秒。
public static String checkRelativeURL(String originalFileLoc, String relativeLoc){
StringBuilder sb = new StringBuilder();
String absolute = Common.relativeToAbsolute(originalFileLoc, relativeLoc); //built in function to replace the link from relative link to absolute path
sb.append(absolute);
sb.append("\t");
try {
Path path = Paths.get(absolute);
sb.append(Files.exists(path));
}catch (InvalidPathException | NullPointerException ex) {
sb.append(false);
}
sb.append("\t");
return sb.toString();
}
在这行代码上执行时间为65毫秒
Path path = Paths.get(absolute);
sb.append(Files.exists(path));
我曾尝试使用过
标签
File file = new File(absolute);
sb.append(file.isFile());
它仍然需要大约65~100毫秒的时间。
所以,有没有其他更快的方法来检查文件是否存在?
由于我要处理超过70k个HTML文件,并且每毫秒都很重要,谢谢 :(
编辑:
我尝试将所有文件列入某个列表中,但这并没有真正帮助,因为列出所有文件需要超过20分钟....
我用于列出所有文件的代码如下:
static public void listFiles2(String filepath){
Path path = Paths.get(filepath);
File file = null;
String pathString = new String();
try {
if(path.toFile().isDirectory()){
DirectoryStream<Path> stream = Files.newDirectoryStream(path);
for(Path entry : stream){
file = entry.toFile();
pathString = entry.toString();
if(file.isDirectory()){
listFiles2(pathString);
}
if (file.isFile()){
filesInProject.add(pathString);
System.out.println(pathString);
}
}
stream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}