2017-05-07 2 views
1

ように私は私が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プロンプトでスタンドアロンのコマンドラインアプリケーションと同じにする必要がありますか?

+0

'File root = new File(" path ");'引数は '' path''の代わりに '' path''だけである必要はありませんか? –

+0

ファイル(パス)をファイル(パス)に修正する –

答えて

0

パラメータを正しく渡していません。 try java SomeExecItem "C:\myFolder\withclasses"またはjava SomeExecItem C:\myFolder\withclassesです。

2

からFile root = new File(path);に変更してください。これで問題は解決します。

+0

このような愚かな構文エラー:( – ha9u63ar

+0

私はもう一度質問を更新しましたが、これは主な問題ではありませんでした。 – ha9u63ar

関連する問題