2016-10-11 3 views
1

Мой класс получает строку, содержащую Path (dir1/dir2/abc.txt) или файл (def.txt), и я хочу писать/читать в этот файл. Если файл не существует, я хочу создать каталоги (если они есть) и файл.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);}} 

Он отлично работает с путями, как «реж/file.txt», но если я только ввести имя файла, я получаю a NullPointerException.

+0

Подойдите ближе к стеклу. Где заброшено исключение? Опубликуйте весь стек, чтобы мы могли помочь. –

ответ

0

Не имея StackTrace, я бы предположить, исключение происходит здесь:

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

ziel не имеет родителя, поэтому ziel.getParentFile() является null.

Вы можете сначала преобразовать в абсолютный путь, затем получить родительский.


Edit (1):

Вы должны улучшить свою обработку ошибок.

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

Не распечатывает стек. Вместо этого вы должны использовать y.printStackTrace() (или соответствующую структуру ведения журнала).


Edit (2):

Вместо того, чтобы ловить FileNotFoundException, вы должны проверить, существует ли файл с помощью метода java.io.File.

+0

спасибо за ответ, проверите это прямо сейчас. Извините за недостающую Stacktrace, мне нужно было начать изучать Java для университетского проекта примерно неделю назад, поэтому я в принципе понятия не имею, что я делаю. – Kompe

+0

Спасибо, ты был прав. Подобные вещи случаются, когда вы просто используете код из stackoverflow, не думая .. – Kompe

Смежные вопросы