0

これは、特定のフォルダー内のすべての 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: 前述のように、フォルダはデフォルトで書き込み保護されており、変更できません。これが根本的な原因のようです。調べてみます...

4

1 に答える 1

0

Windows 7 では、既定では、あるユーザーが別のユーザーのディレクトリにあるファイルまたはフォルダーを読み取ることを許可していませんが、Windows XP では許可されています。次の 2 つのいずれかを行う必要があります。

  1. コードを実行しているユーザーに「読み取り」アクセス許可を付与するフォルダーのユーザーを取得するか、
  2. UAC を使用して、昇格された権限でコードを実行します (例: 昇格されたコマンド プロンプトから)。
于 2013-04-06T09:09:49.610 に答える