这是一个程序,它获取给定文件夹中的所有 PDF 文件,然后添加日期前缀并过滤掉所有变音符号。这适用于我的 Win XP 安装,但不适用于新的 Win7 安装,其中完全相同的代码由于replaceSymbolsInDir(String)
第 4 行中的 nullPointerException 而终止,这是 for 循环之前的空行。
我通过在 Eclipse 中编译它来触发该过程:
import java.io.File;
public class loadFile {
public static String dir = "C:\\Users\\UserName\\Desktop\\PdfDirectory\\";
public static String date = "130406";
public static void main(String args[]) {
replaceSymbolsInDir(dir);
addPrefix(dir, date + "-");
}
public static void replaceSymbolsInDir(String path){
File folder = new File(path);
File[] fileArray = folder.listFiles();
for(int i = 0; i<fileArray.length; i++) {
File currentFile = fileArray[i];
if(currentFile.getName().toLowerCase().endsWith(".pdf")) {
currentFile.renameTo(new File(path, replaceSymbolsInString(currentFile.getName())));
}
}
}
public static String replaceSymbolsInString(String s) {
//figure out regex
String result = s.replace('ä','a');
result = result.replace('ö','o');
result = result.replace('ü','u');
result = result.replace('ß','s');
result = result.replace(' ','-');
return result;
}
public static void addPrefix(String path, String prefix) {
File folder = new File(path);
File fileArray[] = folder.listFiles();
for(int i = 0; i<fileArray.length; i++) {
File currentFile = fileArray[i];
if(!currentFile.getName().startsWith(prefix) && currentFile.getName().toLowerCase().endsWith(".pdf")) {
String newName = prefix + "" + currentFile.getName();
currentFile.renameTo(new File(path, newName));
}
}
}
}
win7 是否会阻止尝试查找有关文件和文件夹的信息的方法?这好像是
folder.listFiles();
即将为空,这就是问题所在。
除了路径错误之外的任何想法?因为这是浏览器窗口外的 ctrl+c/v 加上转义,因此应该是正确的。
编辑:我在唯一现有的用户帐户上运行程序,帐户管理窗口将其标记为“管理员”。在以管理员身份打开 cmd 后从 cmd 运行也会产生 NPE。
Edit2:如前所述,该文件夹默认为写保护且无法更改,这似乎是根本原因。我会调查一下...