2016-03-28 2 views
0

Я пишу программу на Java с использованием инфраструктуры Spark Streaming (даже если вы не знаете, что такое Spark, вы все равно можете узнать ответ на мою проблему). я в основном получать строки, по одному в секунду, через сокет и хочу сохранить их в текстовом файле (каждую строку разделенных абзацем так что-то вроде этого:.Как инициализировать FileWriter за пределами метода main()

FileWriter a = new Filewriter (path to file); 
a.append(string s); 
a.append('\n'); 
a.flush; 

Пути Спарк Streaming работает путь преобразование метода main() в большой цикл while, поэтому для сохранения строк, которые я получаю в том же файле, мне нужно объявить переменную за пределами main() (в противном случае она будет продолжать инициализацию и сохранение только . последняя строка, которую он получает)

проблема заключается в том, из-за IOException, я должен сделать это:

public static void writer() throws IOException 
{ 
    FileWriter a= new Filewriter (path to file); 
} 

Но если я вызываю writer() в main(), я получаю ту же проблему, что и раньше (я продолжаю инициализацию a).

Как инициализировать внешний объект main(), поэтому у меня нет этой проблемы?

Большое вам спасибо.

+0

почему наклоняю вы его смывать его содержимое в файл в конце While (основной) петли и добавить в файл каждый раз? Но я думаю, что частное - это путь, чтобы просто подумать о чем-то другом. – jgr208

+0

Вы не можете называть 'writer()' в статическом блоке? как 'static {writer(); } '? таким образом, он будет выполняться только один раз, включив класс. – Shark

ответ

1

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

private final PrintWriter writer = new PrintWriter(filename, true); 

Использование PrintWriter имеет то преимущество, что

  • он помещает соответствующий символ новой строки в конце каждой строки.
  • его можно включить автозагрузкой.

Вы можете назвать это с

writer.println(text); 
+0

Спасибо, Питер. Теперь я получаю исключение NullPointerException, когда я пытаюсь добавить свои строки, но я думаю, что это другая проблема. –

+0

@manuelmourato, которая случится, если вы попытаетесь добавить до того, как этот код был вызван. Вы можете сделать 'println (null)' –

+1

Хм, если это так, что он не работает для меня. Когда вы говорите «имя файла», вы подразумеваете правильный путь к существующему файлу CSV? Я не могу писать (filepath, true), он не принимает его –

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