2015-01-17 4 views
0

Я хочу объявить статический экземпляр FileWriter и FileReader, чтобы я мог использовать один и тот же файл в большой программе. Eclipse сообщает мне, что необходимо исключить IOException. Как я могу сделать исключение для объявления?Объявление статического FileWriter и FileReader

static FileWriter fileWriter = new FileWriter(file, true); 
static BufferedWriter writer = new BufferedWriter(fileWriter); 
static FileReader fileReader = new FileReader(file); 
static BufferedReader reader = new BufferedReader(fileReader); 

Спасибо.

+1

Не делайте этого. Он просит всевозможные проблемы и является кошмаром для обслуживания и отладки. Вместо этого используйте что-то вроде инъекции зависимостей. – chrylis

+1

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

ответ

2

попробовать что-то вроде этого:

static File file = new File(""); 
static FileWriter fileWriter; 
static BufferedWriter writer; 
static FileReader fileReader; 
static BufferedReader reader; 

static { 
    try { 
     fileWriter = new FileWriter(file, true); 
     writer = new BufferedWriter(fileWriter); 
     fileReader = new FileReader(file); 
     reader = new BufferedReader(fileReader); 
    } catch (final IOException e) { 
     throw new ExceptionInInitializerError(e.getMessage()); 
    } 
} 
+0

Большое спасибо Бруно. Таким образом, я могу использовать экземпляры без вызова метода в других моих методах? Просто интересно и уверенно. – user3491684

+0

Это сработало! Это было очень элегантное решение. – user3491684

+0

Я предлагаю бросить ExceptionInInitializeError (с 'e' в качестве аргумента конструктора) в блоке' catch'. Это способствует ускорению _fail fast_ - программа будет немедленно остановлена, если будет выведено 'IOException'. –

1

Просто поместите throws IOException после объявления метода.

т.е .: public static void main(String[] args) throws IOException { ... }

Вот и все. Хотя это не элегантно, чтобы использовать его таким образом ...

0

Поместите инициализацию в статическом блоке следующим образом:

public final class MyUtil { 
    static FileWriter fileWriter; 
    static BufferedWriter writer; 
    static FileReader fileReader; 
    static BufferedReader reader; 

    static { 
     try { 
      File file = new File("<pathToFile>"); 
      fileWriter = new FileWriter(file, true); 
      writer = new BufferedWriter(fileWriter); 
      fileReader = new FileReader(file); 
      reader = new BufferedReader(fileReader); 
     } 
     catch (IOException e) { 
      // Handle the exception here 
     } 
    } 
} 

Обратите внимание, что это будет своего рода глобальное состояние в файл писатель/читатель может вызывают проблемы в многопоточной среде, поэтому вам может потребоваться некоторая синхронизация, чтобы справиться с этим.

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