これは、特定のフォルダー内のすべての PDF ファイルを取得し、日付のプレフィックスを追加して、すべてのウムラウトを除外するプログラムです。これは私のWin XPインストールでは機能しましたが、新しいWin7インストールでは機能しませんでした.4行目のnullPointerExceptionが原因でまったく同じコードが終了しreplaceSymbolsInDir(String)
ます。これは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();
null が近づいてきており、それが問題です。
パスが間違っている以外のアイデアはありますか? これは、エクスプローラー ウィンドウから ctrl+c/v を押してエスケープしたものであり、正しいはずです。
編集: 既存の唯一のユーザー アカウントでプログラムを実行しています。アカウント管理ウィンドウには「admin」というラベルが付けられています。管理者として cmd を開いた後に cmd から実行すると、NPE も生成されます。
Edit2: 前述のように、フォルダはデフォルトで書き込み保護されており、変更できません。これが根本的な原因のようです。調べてみます...