2016-08-06 13 views
0

Я использую FileOutputStream для записи десятичных значений в файл, и поскольку он может писать только байты или массивы байт, я нахожу, что не могу писать текстовые значения, такие как строки.Запись текстовой строки с помощью FileOuputStream в java?

Я пробовал различные другие классы, такие как Writer и PrintWriter, как под-объекты, но ни один из них, похоже, не может записать файл, как я хочу. Я не хочу создавать новый объект, который потребует повторного открытия файла, это должно быть возможно сделать «в строке». Предложения?

+0

Что вы подразумеваете под встроенным и что вы не хотите создавать новый объект? –

+1

Можете ли вы поделиться запрограммированным кодом и указать, почему он не работает должным образом? – Mureinik

+0

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

ответ

0

Это должно сделать это, я думаю? Он добавит его в конец файла.

public class yourClass 
{ 
    private BufferedWriter bufferedWriter; 

    public static void main(String[] args) 
    { 
     try 
     { 
      bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.txt"), StandardCharsets.UTF_8)); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("Couldn't initialize the BufferedWriter"); 
      e.printStackTrace(); 
      System.exit(0); 
     } 

     writeStuff("Hey"); 
     writeStuff("Hey2"); 
     writeStuff("Hey3"); 
     writeStuff("Hey4"); 
     writeStuff("Hey5"); 
     flushAndClose(false); 
     writeStuff("Hey"); 
     writeStuff("Hey2"); 
     writeStuff("Hey3"); 
     flushAndClose(true); 
    } 

    public void writeStuff(String toWrite) 
    { 
     bufferedWriter.write(toWrite + System.lineSeparator()); 
    } 

    public void flushAndClose(boolean closeToo) 
    { 
     bufferedWriter.flush(); 
     if(closeToo) 
     { 
      bufferedWriter.close(); 
     } 
    } 
} 

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

+1

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

+0

Да, вы на самом деле правы. Буферизация бесполезна, и она никогда не закрывается, но она не была закрыта, не так ли, что сказал опр? вещь линии может быть изменена, то есть до OP он не указал много – ScriptKiddy

+0

Его не следует открывать и закрывать каждый раз, когда вы что-то пишете, но он обязательно должен быть закрыт, когда вы закончите писать все, что хотите написать , –