2009-08-12 3 views
0

Каждый раз, когда я пишу в текстовый файл, я теряю исходные данные, как я могу прочитать файл и ввести данные в пустую строку или следующую строку, которая пуста?Проблема с записью - потеря исходных данных

public void writeToFile() 
{ 

    try 
    { 
     output = new Formatter(myFile); 
    } 
    catch(SecurityException securityException) 
    { 
     System.err.println("Error creating file"); 
     System.exit(1); 
    } 
    catch(FileNotFoundException fileNotFoundException) 
    { 
     System.err.println("Error creating file"); 
     System.exit(1); 
    } 

    Scanner scanner = new Scanner (System.in); 

    String number = ""; 
    String name = ""; 

    System.out.println("Please enter number:"); 
    number = scanner.next(); 

    System.out.println("Please enter name:"); 
    name = scanner.next(); 

    output.format("%s,%s \r\n", number, name); 
    output.close(); 

} 

ответ

1

Вам необходимо открыть myFile в режиме добавления. См. Пример this link.

0

У нас есть: new Formatter(myFile); вы хотите использовать new Formatter(new FileWriter(myfile, true). Истина указывает, что вы хотите добавить к этому файлу.

1

Как уже говорилось, используйте опцию append.

Этот код может записывать данные в кодировке платформы по умолчанию:

private static void appendToFile() throws IOException { 
    boolean append = true; 
    OutputStream out = new FileOutputStream("TextAppend.txt", append); 
    Closeable resource = out; 
    try { 
     PrintWriter pw = new PrintWriter(out); 
     resource = pw; 
     pw.format("%s,%s %n", "foo", "bar"); 
    } finally { 
     resource.close(); 
    } 
    } 

Есть целый ряд классов, которые вы можете обернуть вокруг OutputStream для достижения того же эффекта. Имейте в виду, что вышеупомянутый подход может быть lose data, когда код запускается на платформе, которая не использует кодировку по умолчанию Unicode (например, Windows) и может производить различный вывод на разных ПК.

В одном случае, когда требуется помощь, кодировка вставляет byte order mark. Если вы хотите записать текст Unicode без потерь в UTF-16, отмеченный спецификацией little-endian, вам нужно будет проверить файл на наличие существующих данных.

private static void appendUtf16ToFile() throws IOException { 
    File file = new File("TextAppend_utf16le.txt"); 
    String encoding = (file.isFile() && file.length() > 0) ? 
     "UnicodeLittleUnmarked" : "UnicodeLittle"; 
    boolean append = true; 
    OutputStream out = new FileOutputStream(file, append); 
    Closeable resource = out; 
    try { 
    Writer writer = new OutputStreamWriter(out, encoding); 
    resource = writer; 
    PrintWriter pw = new PrintWriter(writer); 
    resource = pw; 
    pw.format("%s,%s %n", "foo", "bar"); 
    } finally { 
    resource.close(); 
    } 
} 

Поддерживаемые кодировки:

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