2013-11-13 3 views
1

Я делаю программу, которая принимает 10 строк и отправляет их в текстовый файл. Но, моя проблема в том, что она просто перезаписывает любые предыдущие значения, присутствующие в файле. Любые идеи, как предотвратить его переписывание? Моя программа выглядит следующим образом:Программа, выполняющая переписывание

import java.io.*; 
public class TEST 
{ 
    public static void main(String args[])throws IOException 
    { 
     InputStreamReader read=new InputStreamReader(System.in); 
     BufferedReader in=new BufferedReader(read); 
     int a; 
     String x; 
     for (a=1; a<=10; a++) 
     { 
      System.out.println("Please enter a word."); 
      x=in.readLine(); 
      PrintStream konsole = System.out; 
      System.setOut(new PrintStream("TEST.txt")); 
      System.out.println(x); 
      System.setOut(konsole); 
     } 
     System.out.println("DONE"); 
    } 
} 
+0

http://stackoverflow.com/a/1625263/2947592 – wvdz

+0

нет, это не дубликат этого вопроса! Я прошу кого-то отладить мою программу! – user2987896

+0

@ user2987896 Не просите кого-то отлаживать вашу программу, мы не являемся вашим компилятором/отладчиком. Для обзора кода для этого есть отдельный сайт. Оставайтесь красивыми и проявите усилия, люди вам помогут. Начинайте спорить, и все идет вниз оттуда. Кроме этого, добро пожаловать в переполнение стека. – Matthias

ответ

1

Попробуйте записать в выходной поток (не перенаправляется System.out).

С помощью FileOutputStreams вы можете выбрать, хотите ли вы добавить файл или написать новый файл (логическое в конструкторе, посмотрите на JavaDoc). Попробуйте этот код, чтобы создать выходной поток в файл, который не будет перезаписывать файл, но добавьте его.

OutputStream out = new FileOutputStream(new File("Test.txt"), true);

Кроме того, убедитесь вы не создать поток в каждой итерации вашего цикла, но в начале цикла.

Если вы также закрываете выходной поток после цикла (в блоке finally), тогда вы должны быть в порядке.

0

Это должно работать для вас:

public static void main(String[] args) throws IOException { 

    InputStreamReader read=new InputStreamReader(System.in); 
    BufferedReader in=new BufferedReader(read); 
    OutputStream out = new FileOutputStream(new File("TEST.txt"), true); 

    for (int a=1; a<=10; a++) 
    { 
     System.out.println("Please enter a word."); 
     out.write(in.readLine().getBytes()); 
     out.write(System.lineSeparator().getBytes()); 
    } 

    out.close(); 
    System.out.println("DONE"); 
} 
+0

Что такое использование .getBytes()? – user2987896

+0

@ user2987896 Преобразует строку в массив байтов. См. Javadocs здесь: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes() – JamesB