2013-08-08 9 views
5

Linux上でJavaによるファイルアクセスにこのような問題が発生したのは初めてです。問題は、ファイルが実際に存在するときに、FileNotFoundExceptionがスローされるというヘッダーと同じです。さらに、同じ設定(props.txtファイル)を持つアプリケーションは、Windows上で実行する必要があります。 なぜLinux上にFileNotFoundExceptionがスローされるのですか

private void readProperties(String args) throws FileNotFoundException, IOException { 
    System.out.println("Parent: " + new  File(args).getAbsoluteFile().getParentFile().getAbsolutePath()); 
    CommonTools.PrintArray(new File(args).getAbsoluteFile().getParentFile().list()); 
    properties.load(new FileInputStream(new File(args).getAbsoluteFile())); // this line throws the exception 
    stageNumber = Integer.parseInt(properties.getProperty(PROP_STAGE_NUMBER_KEY, "0")); 
} 

props.txtファイルが見つからない、なぜ私は、コンソール出力

 
[email protected]:~/netcrawler/dkpto$ ls -l 
total 20 
-rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate 
drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data 
drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log 
-rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt 
-rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate 
[email protected]:~/netcrawler/dkpto$ ./propsUpdate 
Parent: /usr/home/datasu/netcrawler/dkpto 
    1# -> propsUpdate 
    2# -> autoupdate 
    3# -> props.txt 
    4# -> data 
    5# -> log 
(No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt 
     at java.io.FileInputStream.open(Native Method) 
     at java.io.FileInputStream.(Unknown Source) 
     at netcrawler.Autoupdater.readProperties(Autoupdater.java:71) 
     at netcrawler.Autoupdater.start(Autoupdater.java:54) 
     at netcrawler.Autoupdater.main(Autoupdater.java:47) 
[email protected]:~/netcrawler/dkpto$ java -version 
java version "1.6.0_45" 
Java(TM) SE Runtime Environment (build 1.6.0_45-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 
[email protected]:~/netcrawler/dkpto$ 

の少しを提供しようと、ここでのJavaコードは、(少なくとも./propsUpdateを呼び出した後に)その出力を生成するための責任があります実際にそこにいるときは?

+1

実際のパスは '/ usr/home/datasu /'ですか?私はあなたのlinux/unix版を知らないが、通常は '/ home/...'に何かあるのではないか?特にホームディレクトリを参照する最初の行に '〜/'を表示しているからです。 – DrColossos

+0

これはあなたのためのPWDの結果です: datasu @ dedi2392:〜/ netcrawler/dkpto $ pwd - > /usr/home/datasu/netcrawler/dkpto – Antoniossss

+1

'readPropertiesに渡す' args'の正確な構文は何ですか? '? –

答えて

6

"args"という文字列は、おそらくスペースのように、最後に印字されない文字を含んでいます。その変数を使用する前に、String.trim()を使用してそのような文字を削除することができます。

+2

うわー、今はちょうどばかだ。私はファイル名でいくつかのスペースなどのランチスクリプトをチェックしていますが、何もありませんでした。しかし、議論をトリミングすることはそのトリックを作った。提案ありがとう。今日のレッスン:コマンドラインで渡された引数を信頼しないでください。 VI、VIMに非印刷物を表示させる方法はありますか? – Antoniossss

+0

はい、 ':set list' –

+0

あなたはいつも' echo $ arg | hexdump -C' –

2

あなたのホームフォルダは本当にこのパスですか?

/usr/home/datasu 

/home/datasuは、通常Linux上の場所です。あなたは現在の作業ディレクトリから動作すること./propsUpdate ./props.txtとしてそれを呼び出している場合

properties.load(new FileInputStream(new File(args)); 

また、これにその行を変更してみてください。

+0

このパスは正しいです。アプリケーションを起動して親フォルダがそのようなパス(生成されたチェックコード)でうまく表示されます。 – Antoniossss

+0

あなたが提供したコードが最初のバージョンでした。例外でファイルへのフルパスを表示するように変更してください。 – Antoniossss

+0

パスが絶対パスであることを考慮して、作業ディレクトリがそのパスに影響しないようにしてください。さらに、パスはJavaによって作成され、同じコードはウィンドウ上で正常に動作します。 – Antoniossss

関連する問題