2012-01-06 15 views
3

私は最近プログラムを作成しました。ファイル処理クラスは次です:FileWriterとjarファイル - リソースを見つけることができません

package smartest.eu; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Processor { 
    private BufferedWriter out; 
    private BufferedReader in; 

    // this method opens the file for reading! 
    public void openWriter() throws Exception { 
     if (out == null) { 
      try { 
       out = new BufferedWriter(new FileWriter(new File("src/personaldata.txt"))); 
      } 
      catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
     else { 
      throw new Exception("Writer opened already"); 
     } 
    } 

    // this method opens the reader 
    public void readWriter() throws Exception { 
     if (in == null) { 
      try { 
       in = new BufferedReader(new FileReader("src/personaldata.txt")); 
       in.mark(65538); 
      } 
      catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
     else { 
      throw new Exception("Reader already opened"); 
     } 
    } 

    // this method reads the file line by line outputting a string as the result 
    public String readText() throws Exception { 
     String answer1 = ""; 
     if (in != null) { 
      try { 
       if ((answer1 = in.readLine()) != null) { 
        answer1 += "\n"; 
       } 
       else { 
        answer1 = "No more data!\nThe stream will be read from the beginning!\n"; 
       } 
      } 
      catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
     else { 
      throw new Exception("Open file for reading at first"); 
     } 

     return answer1; 
    } 

    // this method writes the given string to a file 
    public void writeText(String a) throws Exception { 
     if (out != null) { 
      out.write(a); 
      out.flush(); 
     } 
     else { 
      throw new Exception("Open file for writing at first"); 
     } 
    } 

    public void resitStream() { 
     try { 
      in.reset(); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

ディレクトリ構造processor.jar:

1) manifest 
2) personaldata.txt 
3) smartest/eu/*.class 

しかし、私はjarファイルを作っていたときに、それがファイルを見つけることができませんが(「ファイルが見つかりません例外を与えます")。どうすれば修正できますか? P.P.また、jarファイルがjarファイルの中で利用できないのはなぜですか?

答えて

5

ライン

new FileReader("src/personaldata.txt") 

試みは、現在のディレクトリのサブディレクトリsrcで、ファイルpersonaldata.txtを開きます。現在のディレクトリは、コマンドプロンプトでjavaコマンドを起動したときのディレクトリです。したがって、c:\にあり、java -jar the/path/to/myJar.jarを起動すると、c:\ src \ personaldata.txtにあるファイルが検索されます。

ファイルは、ファイルシステムにアクセスするために使用されます。 jarファイル内のリソースではありません。クラスパスからリソースをロードするには、

Processor.class.getResourceAsStream("/personaldata.txt") 

を使用する必要があり、それがどのように機能するかを理解するためにjavadoc of this methodを見てください。

jarファイル内のファイルへの書き込みは不可能です。

+0

ありがとうございます。これは役に立つヒントです。 –

関連する問題