2016-10-11 9 views
1

私のクラスはパス(dir1/dir2/abc.txt)またはファイル(def.txt)を含むStringを取得し、そのファイルに書き込み/読み込みを行います。ファイルが存在しない場合、私はディレクトリ(あれば)とファイルを作成したいと思います。Java:存在しない場合のファイルまたはディレクトリの作成

私のクラスのコンストラクタこれまでのところ(「PFAD」は、インスタンス変数です):

public SerializedFahrzeugDAO(String path) { 
    pfad=path; 

    try{ 


     FileInputStream filein= new FileInputStream(pfad); 
     ObjectInputStream in = new ObjectInputStream(filein); 
     List<Fahrzeug> liste = (List<Fahrzeug>)in.readObject(); 
     in.close(); 
     FileOutputStream fileout = new FileOutputStream(pfad); 
     ObjectOutputStream out = new ObjectOutputStream(fileout); 

     out.writeObject(liste); 
     out.close(); 

    } 
    catch (Exception f){ 
     if(f instanceof FileNotFoundException){ 
      try{ 
       File ziel = new File(pfad); 
       File dir= new File(ziel.getParentFile().getAbsolutePath()); 
       dir.mkdirs(); 
       FileOutputStream fileout = new FileOutputStream(pfad); 
       ObjectOutputStream out = new ObjectOutputStream(fileout); 
       List<Fahrzeug> newlist = new ArrayList<Fahrzeug>(); 
       out.writeObject(newlist); 
       out.close(); 
      } 
      catch(Exception y){System.out.println(y); } 
     } 

     else {System.out.println(f);}} 

それは「DIR/file.txtは」のようなパスを持つ正常に動作しますが、私は私が手に、ファイル名のみを入力した場合a NullPointerException

+0

stacktraceを見てください。例外はどこにスローされますか?おそらく助けることができるようにstacktrace全体を投稿してください。 –

答えて

0

スタックトレースを持たずに、私が引き受ける、例外はここに起こる:

  File dir= new File(ziel.getParentFile().getAbsolutePath()); 

zielは親を持ちませんので、ziel.getParentFile()nullです。

最初に絶対パスに変換して親を取得することができます。


編集(1):

あなたのエラー処理を改善する必要があります。

 catch(Exception y){System.out.println(y); } 

スタックトレースを印刷しません。代わりにy.printStackTrace()(または適切なロギングフレームワーク)を使用する必要があります。


編集(2):

代わりFileNotFoundExceptionを引くのファイルがjava.io.Fileの方法を使用して存在している場合、あなたは確認する必要があります。

+0

答えに感謝し、その権利をチェックします。 Stacktraceが足りなくて申し訳ありませんが、1週間ほど前にUniversity-ProjectのJavaの学習を始めなければならなかったので、基本的に私は何をしているのか分かりません。 – Kompe

+0

ありがとうございます、あなたは正しいです。あなたが考えることなくstackoverflowからコードを使用すると、そのようなものが発生します.. – Kompe

関連する問題