2016-09-02 24 views
0

これは解決されていると確信していますが、10種類の戦略はこの問題では機能していません。Java FileNotFoundException - 絶対パスで読み込みまたは実行するが、ファイルが存在する

ファイルの絶対パスとしてC:\ Users \ Anny \ Dropbox \ SocialMediaOcto \ instructions \ Trees \ instructions.txtを使用している場合、IDEAはこのパスからの読み取りや実行ができません。私が同じパスを使ってWindowsエクスプローラに貼り付けるとすぐに実行されます。私はこのファイルがプログラムの設定ファイルとして機能するので作業ディレクトリに集中したくはありませんが、スラッシュをバックスラッシュで置き換えることはできません。絶対パスはファイルに渡しますが、IDEAは起動しません。

私はウィッツエンドです。

public static String generateFileName(String folder){ 

    String filename = ""; 
    List<String> hashtags = new ArrayList<>(); 
    String instructions_file =   "C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt"; 

    //does not return true-true, but can launch file on windows explorer.. 
    System.out.println("FILE EXIST AND EXECUTE?" + new File(instructions_file).getAbsoluteFile().canRead() +" "+new File(instructions_file).getAbsoluteFile().canExecute()); 

    System.out.println(new File(instructions_file).getAbsoluteFile()); 
    //C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt 

    BufferedReader br = null; 

    try { 

     String sCurrentLine; 

     br = new BufferedReader(new FileReader(new File(instructions_file).getAbsoluteFile())); 

EDIT スラッシュとバックスラッシュを交換した後、リーダは依然として適切に読み取るまたはファイルを実行することができません。

LOG: の文字列が表示されます C:/Users/Anny/Dropbox/SocialMediaOcto/instructions/Bees/instructions.txt

java.io.FileNotFoundException: C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Bees\instructions.txt (The system cannot find the file specified) 
+2

ダブルブラックスラッシュでバックスラッシュをエスケープする必要があります。私はこのコードはコンパイルエラーを与える必要があります – Jens

+1

Javaでは、二重バックスラッシュが必要です。文字列instructions_file = "C:\\ Users \ Anny \\ Dropbox \\ SocialMediaOcto \\ instructions \\ Trees \\ instructions.txt"; –

+0

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html –

答えて

5

正しいURL:

String instructions_file = "C:/Users/Anny/Dropbox/SocialMediaOcto/instructions/Trees/instructions.txt"; 

ので、 \はJavaのエスケープ文字です。文字として\を使用する場合は、それ自体をエスケープする必要があります。

正しいURL v2の:

String instructions_file = "C:\\Users\\Anny\\Dropbox\\SocialMediaOcto\\instructions\\Trees\\instructions.txt"; 

あなたが持っていた何を:

String instructions_file = "C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt"; 

は、それが最初に使用するためにはるかに良いです、私のoppinionで

"C:{something}sers{something}nny{something}ropbox{something}ocialMediaOcto{something}nstructions\Trees\instructions.txt" 

としてのJavaによって読み取られますそれはプラットフォームとして安全です。

+0

私は\\もそれを構築していたと思うが、私はこれに取り組むだろう。ありがとう。 – Jayizzle

+1

@Jayizzleは前方スラッシュを使用する方がはるかに良いアプローチです!プラットフォームは安全です。バックスラッシュを使用すると、一部のオペレーティングシステムでは動作しないことがあります。この回答が参考になった場合は、スコアの下にある灰色のチェックマークをクリックして解決策としてマークしてください。 – xenteros

+0

待って、いいえ、それはうまくいきませんでした。それはまだ同じエラーを投げます。 – Jayizzle

関連する問題