2016-08-23 2 views
0

Я пытаюсь сохранить слова в файле разделенных коме в массиве Java
ФайлSystem.out.println печатает строку, но System.out.print не

Возраст, доход, студент , кредитный рейтинг, Класс: Покупает Компьютер

молодежи, высокий, нет, ярмарка, No

молодежи, высокий, нет, отлично, нет

средних лет, высокий, нет, отлично, нет

старший, средний, Нет, ярмарка, да

Старший, низкий, да, ярмарка, да

Старший, низкий, да, отлично, нет

public class Test { 
    public static void main(String args[]) throws FileNotFoundException, IOException{ 
    FileInputStream f=new FileInputStream("F:\\pr\\src\\dmexam\\inp2.txt"); 
    int size,nr=7,nc=5,j=0,i=0; 
    char ch; 
    String table[][]=new String[nr][nc]; 
    size=f.available(); 
    table[0][0]=new String(); 
    while(size--!=0){ 
     ch=(char)f.read(); 
     if(ch=='\n') 
     { 
      i++; 
      if(i>=nr) 
       break; 
      table[i][0]=new String(); 
      j=0; 
      continue; 

     } 
     if(ch==',') 
     {  
      j++; 
      table[i][j]=new String(); 
      continue; 
     } 
      table[i][j]+=ch; 
    } 
    f.close(); 
    System.out.println("The given table is:::---"); 
    for(i=0;i<nr;i++){ 
     for(j=0;j<nc;j++){ 
     System.out.print(" "+table[i][j]); 
     System.out.print(" "); 
     } 
    } 
} 
} 

Но выход не

Данная таблица является ::: ---

Но если для изменяется как этот

System.out.println("The given table is:::---"); 
for(i=0;i<nr;i++){ 
    for(j=0;j<nc-1;j++){ 
     System.out.print(" "+table[i][j]); 

     System.out.print(" "); 
    } 
    System.out.println(table[i][nc-1]); 
} 

Выход

Данная таблица ::: --- Возраст доход Студент кредитный рейтинг Класс: Покупает Компьютер

молодежи высокого Нет Fair нет

молодежи высокой нет Отлично нет

Среднего возраста с высоким нет Отличный нет

Старший среда Нет Fair Да

Старший Низкий Да Fair Да

Старший Низкий Да Отличный Нет

Я хочу знать «почему System.out.print не workig ??? «...

+0

Я собираюсь остановить вас прямо там и передать вас в [Stringbuilder] (http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html) –

+0

Почему вы хотите чтобы сделать вашу жизнь труднее и читать текст как отдельный символ (особенно с потоками, которые должны обрабатывать данные как байты, а не как текст, так как одиночный символ не нужно писать в один байт)? У нас есть Читатели для обработки данных чтения в виде текста. С помощью 'BufferedReader' вы можете читать строки как строки без помощи метода readLine(). Существует также «Сканер», который предоставляет такие методы, как 'nextLine()' 'nextInt' и т. Д. Для других типов (просто знайте: http://stackoverflow.com/q/13102045). – Pshemo

ответ

8

PrintStream that System.out uses имеет внутренний буфер, так как запись в стандартное устройство относительно дорого - вы не обязательно будете делать это для каждого символа. Этот буфер автоматически очищается при написании новой строки, поэтому println заставляет текст появляться. Без этой новой строки ваша строка просто находится в буфере, ожидая сброса.

Вы можете принудительно выполнить ручную очистку, вызвав System.out.flush().

+0

Я добавил System.out.flush() после 'System.out.print (" "+ table [i] [j]);' но он все еще не работает, можете ли сказать, где его добавить? @yshavit – nicky97

+0

Хм, это работает для меня. Что не работает? Не появляется ли какой-либо текст или что-то еще? Кроме того, как вы это используете - какая версия ОС Java, как вы на самом деле выполняете исполняемый файл? – yshavit

+0

Он дает предыдущий результат ... Я использую netbeans 8.1 и jdk 1.8 в окнах 10 @yshavit – nicky97

0

Хорошо, позвольте мне попытаться помочь вам здесь. Таким образом, вы делаете свою жизнь очень грубой в данный момент. Вы пытались посмотреть на различные библиотеки, такие как BufferedWritter/FileWritter?

Вы можете легко импортировать их в свой проект с помощью:

import java.io.BufferedWritter; 
import java.io.FileWritter; 

Также рекомендуется отлавливать ошибки, используя библиотеку IOException:

import java.io.IOException; 

Что касается разделения слов, эти библиотеки дайте вам инструменты, такие как контроль над разделителем. Например, мы можем сделать что-то вроде этого:

//this is if you are creating a new file, if not, you want true to append to an existing file 
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt", boolean false)); 
try 
{ 
    // write the text string to the file 
    bw.write("Youth,high,No,Fair,No"); 

    // creates a newline in the file 
    bw.newLine(); 
} 

// handle exceptions 
catch (IOException exc) 
{ 
    exc.printStackTrace(); 
} 

// remember to close the file at the end 
    bw.close(); 

Теперь, для жесткого кодирования данных, но мы можем сделать это с циклом. Мы можем добавить разделители в функцию в цикле for, например: (я не уверен, как у вас хранятся данные, но я предполагаю, что вы сохраните их в массиве.Я также предполагаю, что ВСЕГДА будет 5 наборов данных не в каждой строке)

BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt", boolean false)); 
for (int i = 1, i <= listName.size()+1, i++) { 
    if (i % 5 == 0) { 
     bw.write(listName.get(i-1)); 
     bw.write(", "); 
     bw.newLine(); 
    } else { 
     bw.write(listName.get(i-1)); 
     bw.write(", "); 
    } 
} 

Это будет записывать в файл:

молодежи, высокий, нет, ясно, без

молодежи, высокий, нет, Excellent, No

средних лет, высокий, Нет, Отлично, Нет

старший, средний, Нет, ярмарка, да

Старший, низкий, да, ярмарка, да

Старший, низкий, да, отлично, нет

Это может сделать вашу жизнь немного легче (если я четко понимаю ваши потребности). В следующий раз, пожалуйста, убедитесь, что ваш вопрос больше, чем вы.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не тестировал весь код, поэтому, если вы нашли ошибку, пожалуйста, дайте мне знать, и я отредактирую ее по мере необходимости. Если я получу время, я буду уверен, что это сработает.

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