2017-03-06 20 views
1

私のアプリケーションは例外をスローします - java.io.FileNotFoundException:無効なファイルパスです。理由は分かりません。私はテーマについての質問と回答を読んだが、誰も私を助けなかった。ここで無効なファイルパスの例外

はコードです:

String userhome = System.getProperty("user.home"); 
    String filename = null; 
    File rdp = null; 
    for (int item = 0; item < darab; item++) { 
     filename = toValidFileName(ProgramList.get(item).getP_name()); 
     filename += ".rdp"; 
     rdp = new File(userhome, filename); 
     try { 
      JFrame panel; 
      panel = new JFrame(); 
      panel.setSize(400, 10); 
      panel.setLocation(300, 400); 
      panel.setTitle("Saving " + rdp.getAbsolutePath()); 

      try (FileOutputStream fstr = new FileOutputStream(rdp)) { 
       panel.setVisible(true); 
       char c; 
       for (int j = 0; j < 2336; j++) { 
        c = ProgramList.get(item).p_body.charAt(j); 
        fstr.write(c); 
       } 
       fstr.flush(); 
       fstr.close(); 
       panel.setVisible(false); 
      } 

     } catch (IOException ioe) { 
      JOptionPane.showMessageDialog(this, 
        ioe.getMessage(), "Save rdp file", JOptionPane.ERROR_MESSAGE); 
      System.err.println(ioe.getMessage() + " : "+ rdp.getAbsoluteFile()); 
     } 
    } 

そして結果: 無効なファイルのパス:C:\ユーザーは)

toValidFilename(LIPI \ CosmicLd.rdpを\(から禁止された文字を削除していますKORG RADIAS)プログラム名を入力して有効なファイル名を作成します。 。

私は私のせいを見つけていませんでした:( 先のディレクトリが読み取り専用されていない、私は行の後file.canWriteを()表示すると、ユーザーは必要なprivilegsがあります RDP =新しいファイル(USERHOME、ファイル名); それは常にfalseです 私が間違って何をしました おかげ

+0

ファイルチョイスでファイルを選択して作業しているとします。 –

+1

スタックトレースとtoValidFileNameコードを投稿しますか? – efekctive

+0

同じファイルをファイル・チェイサーで選択し、ファイル名を出力してください。失敗した名前と名前を比較してください。空白を調べてください。 – Arkadiy

答えて

0

代わりにしてFileWriter使用してみてくださいあなたの試みは、次のようになります。?!。

try { 
    File dir = new File("C:/Users//" + userhome + "/Documents"); //customize this however 
    FileWriter fstr = new FileWriter(new File(dir, rdp)); 
      for (int j = 0; j < 2336; j++) { 
       c = ProgramList.get(item).p_body.charAt(j); 
       fstr.write(c); 
         } 
      fw.close(); 
     } 

を、Javaの変数の命名に固執してみてくださいuserhomeはuserHome、などJuでなければなりませんSTマイナーなもの:)問題は、その行で生成された

+0

なぜこのような状況に役立つと思いますか? – matt

+0

Filewriterは論理的でわかりやすいと私自身に証明されています。私の最善の策は、コードが正しいパスを生成していない/読んでいないということです。 – Jerevand

0

:時にはそれが持っているbecouse(CHAR)getP_name()の結果と

filename = toValidFileName(ProgramList.get(item).getP_name()); 

、0文字...

コード書き換えられます - >(文字)0文字はオブジェクトの20文字に(文字)変更され、このようにすべてが機能しています。

toValidFileNameコードとにかくこの:

public static String toValidFileName(String input) { 
    return input.replaceAll("[:\\\\/*\"?|<>']", "_"); 
} 

はあなたの助けありがとうございました!特にArkady'sやVGRの助言などのアドバイスがあります。