2013-04-06 37 views
0

這是一個程序,它將一個給定文件夾中的所有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:如前所述,該文件夾默認爲寫保護,無法更改,這似乎是根本原因。我會研究它...

+0

我想這可能會幫助您:http://stackoverflow.com/questions/14284975/why-does-java-io-file-listfiles-throw-npe-in​​stead-of-proper-exception – 2013-04-06 08:59:26

+2

之前調用'listFiles()'確保'文件夾'存在,是一個目錄,並且是可讀的。這是首先要檢查的。 – Axel 2013-04-06 09:00:27

+0

您的replacesymbols方法會更好地使用白名單,否則每次遇到需要替換的新字符時,都必須更改方法 – artbristol 2013-04-06 09:19:57

回答

0

Windows 7不允許一個用戶在另一個用戶的目錄中默認讀取文件或文件夾,而Windows XP則可以。你需要做兩件事情之一:

  1. 獲取提升的權限,其文件夾,這是授予「讀」權限給用戶誰在運行代碼的用戶,或
  2. 運行代碼(例如,從提升的命令提示符)使用UAC。
+0

出於好奇,人們會怎麼做第2號? – stevenelberger 2013-04-06 09:11:02

+1

最簡單的方法是按開始,在搜索框中輸入「cmd」,右鍵單擊cmd.exe搜索結果,選擇「以管理員身份運行」,然後像往常一樣運行項目。 – Jules 2013-04-06 09:11:51

+0

比我預期的更容易。謝謝! – stevenelberger 2013-04-06 09:16:06