ように私は私がmain
スレッドから実行するこの次のメソッドを作成していないjava.io.Fileの#listFiles()は、WindowsのCMDからnullを返しますが、Eclipseのプロジェクトを実行し
public static LinkedList<File> checkFile(String path, LinkedList<File> result) Throws IOException, SecurityException{
File root = new File(path);
File[] list = root.listFiles();
if (list == null)
return result;
for (File f : list) {
if (f.isDirectory()) {
checkFile(f.getAbsolutePath(), result);
} else {
result.add(f.getAbsoluteFile());
}
}
return result;
}
限り、それはに見えるようファイル自体と同じ場所に、すべてのファイルをリストすることができます。しかし、私が他の場所(例えばC:\ somedir)を指すとすぐに、それは常にnull
を返します。私はこれを日食の中で実行すると、うまく動作しています。私はWindowsパスにJAVA_HOME
を追加して以来、クラスパスの問題であるとは考えていません。したがって、それは取得されます(また、javac
コマンドも正常に動作します)。
私は、listFiles
メソッド実行のエラー処理に基づいてバージョン1.4にJavaバグがあったことを覚えています。しかし、私はjava
コマンドを使ってコマンドラインから実行すると、なぜこれが動作しないのか分かりません。
あなたは
public static void main(String[] args) throws IOException {
if (args.length == 0 || args[0] == null){
System.out.println("please specify path to the project's work folder");
return;
}
String folderPath = (String) args[0];
LinkedList<File> result = new LinkedList<>();
result = checkFile(folderPath, result);
long startTime = System.currentTimeMillis();
for (File file : result) {
System.out.println(file.getName());
}
}
EDIT
、それを実行するには、次のラッパーを使用することができますさて、私は私ではなく、パラメータpath
、これを指摘皆のための感謝のリテラル"path"
を使用することを実現していますでる。しかし、主な問題が優先されます。実行可能クラス自体の場所にない場合、パスは認識されません。 Eclipseからこれをプロジェクトとして実行しようとすると、うまくいきます!しかし、私はコマンドプロンプトから単純なコマンドを使用してそれをしようとすると、それは動作しませんと#listFiles()
は常にnullを返します。
java SomeExecItem -C:\myFolder\withclasses
java.io.File#listFiles()
方法ソース解析から、私が理解することは、私は、コマンドラインから実行する場合であればisInvalid()
がfalseと評価されていることです。考えられる唯一の理由は、indexOf('\u0000')
が-1と評価されていますか?
ここでの違いは何ですか?私は管理者モードでは実行していないので、Eclipseのビュー/読み取り権限は、cmdプロンプトでスタンドアロンのコマンドラインアプリケーションと同じにする必要がありますか?
'File root = new File(" path ");'引数は '' path''の代わりに '' path''だけである必要はありませんか? –
ファイル(パス)をファイル(パス)に修正する –