2015-04-07 1 views
1

Это мой метод, чтобы записать в файл, этот метод относится к классуPrintWriter не добавляя в Java, используя FileOutputStream

public void write(FileOutputStream fo) throws IOException 
    { 
     PrintWriter out=new PrintWriter(fo); 
     for (int i = 0; i < size; i++) { 
      String formatted="%3d"; 
      for (int j=0;j<size;j++) 
      { 
       out.append(String.format(formatted,arr[i][j])); 
      } 
      out.append(System.getProperty("line.separator")); 
     } 
     out.append(System.getProperty("line.separator")); 
     out.close(); 
    } 

Я хочу, чтобы написать свои результаты в множество различных файлов, соответствующих входным файлам READ соответствующего созданный объект, поэтому я передаю чтобы быть написанным файл в качестве параметра этого метода

Он не добавляет на всех

потратив несколько часов в поисках решения этой проблемы, я только получил результаты добавления с помощью PrintWriter с указанным путь файла, например:

PrintWriter out=new PrintWriter(new FileWriter("output1.txt",true)); 

Если я использую

PrintWriter out=new PrintWriter(new FileWriter(fo,true)); 

я сталкиваюсь ошибку

Это не добавляет, когда метод записи моих 2 экземпляров этого объекта называется

public void writeSolution() throws IOException 
    { 
     fo=new FileOutputStream("output\\output1.txt",true); 
     start.write(fo); 
     goal.write(fo); 
     fo.close(); 
    } 

Помогите решить эту проблему

ответ

0

Когда вы закрываете PrintWriter, метод close()также закрывает нижележащий поток/писатель.

При каждом вызове вашего метода write вы открываете PrintWriter, а затем закрываете его в конце. Это означает, что поток закрыт. В следующий раз, когда вы откроете для него PrintWriter, это закрытый файл. Вы не можете писать в закрытый файл.

A PrintWriter не вызывает исключений, когда вы делаете что-то подобное, поэтому он молча ничего не делает. И вы не вызываете его метод checkError(), поэтому вы не знаете, что там была ошибка.

Что вы должны сделать, это объявить PrintWriter как поле (так, что она сохраняет свое состояние между вызовами write(), откройте его, прежде чем начать вызов метода write(), и закрыть его после окончания вызова метода write() для последнего и не забудьте проверить ошибки

+0

Но как я могу передать fo как параметр? – necroface

+0

Я сделал, как вы сказали, и ничего не пишет моему файлу – necroface

+0

Мне удалось решить эту проблему, спасибо :) – necroface