2015-11-19 9 views
0

В настоящее время я использую blueJ для изучения Java, и у меня есть назначение, где мне нужно записать в txt-файл, проверить, существует ли файл и прочитать файл. Код, который у меня есть, ниже компилируется, но когда я пытаюсь запустить метод write(), я получаю следующую ошибку java.lang.nullpointerexception;Не удается записать файл java txt

Я не знаю, где я ошибаюсь, и на этом этапе меня заводили орехи.

import java.io.*; 

public class ReadWrite 
{ 
// instance variables - replace the example below with your own 
private String file; 
private String text; 

/** 
* Constructor for objects of class ReadWrite 
*/ 
public ReadWrite(String file, String text) 
{ 
    // initialise instance variables 
    file=this.file; 
    text=this.text; 
} 

public void write() 
{ 


    try{ 
     FileWriter writer = new FileWriter(file); 

     writer.write(text); 
     writer.write('\n'); 
     writer.close(); 
    } 
    catch(IOException e) 
    { 
     System.out.print(e); 
    } 


} 

public boolean writeToFile() 
{ 

    boolean ok; 

    try{ 

     FileWriter writer = new FileWriter(file); 

     { 
      write(); 
     } 

     ok=true; 
    } 

    catch(IOException e) { 

     ok=false; 

    } 

    return ok; 

    } 

public void read(String fileToRead) 
{ 
    try { 
     BufferedReader reader = new BufferedReader(new  FileReader(fileToRead)); 
     String line = reader.readLine(); 

      while(line != null) { 
       System.out.println(line); 
       line = reader.readLine(); 
      } 

      reader.close(); 

       } 
       catch(FileNotFoundException e) { 


       } 
       catch(IOException e) { 

       } 
} 

}

+3

Возможный дубликат [Что является исключение нулевого указателя, и как это исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception- и-how-do-i-fix-it) –

+1

проверьте ссылку, также, если вы вставляете полный стек и строку, вызывающую исключение –

+1

, посмотрите на стек. (Исключайте такие исключения, как e.printStackTrace(), вместо использования System.out.println (e)); Потому что тогда он скажет вам, где проблема, а не просто сообщение об ошибке. –

ответ

1

Ваш конструктор присвоения значения в обратном направлении. На данный момент у вас есть

public ReadWrite(String file, String text) 
{ 
    // initialise instance variables 
    file=this.file; 
    text=this.text; 
} 

Это назначение входящих переменных file и text к переменным экземпляра, которые являются нуль.

То, что вы должны иметь это:

public ReadWrite(String file, String text) 
{ 
    // initialise instance variables 
    this.file = file; 
    this.text = text; 
} 

Полезный способ избежать этого в будущем, чтобы сделать ваши параметры final - это означает, что вы ничего не можете назначить для них, и вы будете поймайте это в компиляторе.

public ReadWrite(final String file, final String text) 
{ 
    // won't compile! 
    file = this.file; 
    text = this.text; 
} 

Дальнейшее улучшение было бы сделать переменные экземпляра file и textfinal, что означает, что они имеют быть назначены. Таким образом, вы используете компилятор, чтобы помочь вам поймать ошибки.

public class ReadWrite 
{ 
    private final String file; 
    private final String text; 

    public ReadWrite(final String file, 
        final String text) 
    { 
     this.file = file; 
     this.text = text; 
    } 

    // ... 
} 
+0

Спасибо миллиону Стиву, я не могу поверить, что у меня была ценность в обратном направлении! Я мог бы взглянуть на это на неделю и до сих пор не заметил! –

+0

Затем вы найдете свой 'writer.close();' должен находиться в блоке 'finally' или' try-with-resource'. –

+0

Да, я подумал, что позже вы узнаете о моем коде, спасибо за помощь. –

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