2013-09-14 11 views
0

люди. Я пытаюсь записать файл из стека. Стек создавался путем чтения из другого файла. Я использую стек, чтобы я мог отменить файл, который я читал. Имена файлов для чтения и записи относятся к командной строке. Это, как я мой стек реализован:пишите в файл из стека

while(read.hasNext()) { 
stack.push(read.next());} 

Код для моего другого файла, что стек должен написать:

FileWriter w = null; 
     try { 
      w = new FileWriter(new File(args[1])); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     if (!stack.isEmpty()) { //this was a while statement 
      try { 
       w.write(stack.pop()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      System.out.println("Didn't make it."); 
     } 

Проблема, что у меня есть, когда я бегу моя программа, файл, который я хочу написать, создается, но ничего не записывается в файл. Первоначально я думал, что в моем стеке ничего не было (поэтому я изменил свой оператор while на if, это временно). «Не получилось». не печатал, поэтому я теперь знаю, что это не так. Что я здесь делаю неправильно? Любая помощь приветствуется.

+4

ли вы когда-нибудь закрыть 'FileWriter'? Вывод может быть буферизирован и никогда не переносится в файл. –

ответ

2

После w.write (stack.pop()); вызов метода Fush():

w.write(stack.pop()); 
w.flush(); 

и вы можете вернуть то время как заявление. По окончании вызова w.close();

+0

Awesome. Это сработало отлично. Я всегда что-то забываю. – MCsuchNsuch

1

метод stack.pop возвращает объект, если не указать на момент заявления, как этот Stack<String> stack = new Stack<String>();

и после записи вы должны использовать w.flush(), а также вы должны использовать w.close.

вы должны гнездиться это время оператор сам в блок Ьгу , например

try { 
    while(!stack.isEmpty()) { 
    w.write(stack.pop()); // assuming you have declared it as Stack<E> 
    } 
    w.flush(); 
    w.close(); 
} catch(IOException e) { 
    e.printStackTrace(); 
} 

EDIT:

после того, как вы закончите с FileWriter при закрытии, который должен вложен в попробуйте поймать блок, чтобы поймать любой IOException если брошен. если вы используете метод w.write() внутри фиксирующий блока попробовать, что находится в пределах контура времени, то после итерации цикла while закончено, вы должны построить еще одну попытку поймать на место w.close()

+0

Я установил стек как строку. Это намного раньше в моем коде. Я буду играть с блоком try, но можете ли вы сказать мне, что это изменит? – MCsuchNsuch

+0

после того, как вы закончите с FileWriter, когда вы его закроете, который должен быть вложен внутри блока catch try, чтобы поймать любое исключение IOException при его броске. Если вы используете метод 'w.write()' внутри блока catch try, который находится внутри цикла while, то после окончания цикла while while вы должны построить еще один try catch для размещения 'w.close() ' –