這是一個程序,它將一個給定文件夾中的所有PDF文件,然後添加一個日期前綴並過濾出所有變音符號。這適用於我的Win XP安裝,但不是在新的Win7上,因爲replaceSymbolsInDir(String)
的第4行中出現nullPointerException,完全相同的代碼終止,這是for循環之前的空行。Windows 7阻止java.io.File方法?
我通過在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瀏覽器窗口加上轉義,因此應該是正確的。
編輯:我在現有的唯一用戶帳戶上運行程序,帳戶管理窗口將其標記爲「admin」。以管理員身份打開cmd後從cmd運行也會生成NPE。
Edit2:如前所述,該文件夾默認爲寫保護,無法更改,這似乎是根本原因。我會研究它...
我想這可能會幫助您:http://stackoverflow.com/questions/14284975/why-does-java-io-file-listfiles-throw-npe-instead-of-proper-exception – 2013-04-06 08:59:26
之前調用'listFiles()'確保'文件夾'存在,是一個目錄,並且是可讀的。這是首先要檢查的。 – Axel 2013-04-06 09:00:27
您的replacesymbols方法會更好地使用白名單,否則每次遇到需要替換的新字符時,都必須更改方法 – artbristol 2013-04-06 09:19:57