2017-01-15 3 views
-1

Я хочу преобразовать свой IO-класс из java в Eclipse в API Android. По какой-то причине он не работает на android! Это дает мне исключение NullPointerException в моем методе Println. Этот класс используется для создания, записи, чтения и открытия текстовых файлов. Моя цель - сделать все эти методы доступными для чтения на Android.Преобразование Java IO класса в Android IO

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.io.PrintWriter; 
public class IO { 
    private static PrintWriter fileOut; 
    private static BufferedReader fileIn; 

    public static void createOutputFile(String fileName) { 
     try { 
      fileOut = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); 
     } catch (IOException e) { 
      System.out.println("*** Cannot create file: " + fileName + " ***"); 
     } 
    } 

    public static void openOutputFile(String fileName) { 
     try { 
      fileOut = new PrintWriter(new BufferedWriter(new FileWriter(fileName, true))); 
     } catch (IOException e) { 
      System.out.println("*** Cannot open file: " + fileName + " ***"); 
     } 
    } 

    public static void openOutputFile2(String fileName) { 
     try { 
      fileOut = new PrintWriter(new BufferedWriter(new FileWriter(fileName, false))); 
     } catch (IOException e) { 
      System.out.println("*** Cannot open file: " + fileName + " ***"); 
     } 
    } 



    public static void print(String text) { 
     fileOut.print(text); 
    } 

    public static void println(String text) { 
     fileOut.println(text); 
     //System.out.println(text); 
    } 

    public static void closeOutputFile() { 
     fileOut.close(); 
    } 

    public static void openInputFile(String fileName) { 
     try { 
      fileIn = new BufferedReader(new FileReader(fileName)); 
      //System.out.println("opening " + fileName); 
     } catch (FileNotFoundException e) { 
      System.out.println("***Cannot open " + fileName + "***"); 
     } 
    } 

    public static String readLine() 
    // throws IOException 
    // Note: if there's an error in this method it will return IOException 
    { 
     try { 

      return fileIn.readLine(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return "errors"; 
     } 

    } 

    public static void closeInputFile() {// throws IOException 
     // Note: if there's an error in this method it will return IOException 
     try { 
      fileIn.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Объясните, что вы подразумеваете под словом «не работает». Включить сообщения об ошибках. Если вы игнорируете ошибки, возвращаемые вашей инфраструктурой, перестаньте это делать, чтобы предоставить соответствующую информацию. См. [Ask] для получения дополнительной информации. –

+0

Я получаю исключение нулевого указателя при запуске моего кода –

+0

Пожалуйста, отредактируйте эту информацию в своем вопросе и включите ***, где *** в стеке вызовов это ошибка. –

ответ

0

Если вы получаете NullPointerException в println то, что было бы, потому что «fileOut» равно нулю.

public static void println(String text) { 
    fileOut.println(text); 
    //System.out.println(text); 
} 

Вы на самом деле реагируете на свою вторую ошибку, потому что проигнорировали первую. Во всех случаях, когда вы устанавливаете fileOut, вы проглатываете (эффективно скрываете) ошибку. Например.

public static void openOutputFile(String fileName) { 
    try { 
     fileOut = new PrintWriter(new BufferedWriter(new FileWriter(fileName, true))); 
    } catch (IOException e) { 
     //Don't do this, it makes debugging much more difficult. 
     //Because the root problem is hidden. 
     //So now you have 2 problems to solve. 
     //And you've thrown away the information that might have 
     //helped to solve the problem in the first place. 
     System.out.println("*** Cannot open file: " + fileName + " ***"); 
    } 
} 

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

Исправить неправильную обработку исключений, и вы сможете отследить проблему с корнем (возможно, файл не найден или ошибка разрешения).

+0

Спасибо !!!! Я рассмотрю его как можно скорее :). И я никогда не думал об этом! Наша школа научила нас удивляться этому. –

+0

HI Я просто хотел узнать, как бы у меня хорошая обработка исключений? –

+0

Потому что что еще я могу сделать, кроме IOException, так как я получаю ошибки, используя другие вещи. –