System.out.println打印字符串但System.out.print不打印

时间:2016-08-23 20:03:16

标签: java file printing

我试图将这些单词存储在java数组中由昏迷分隔的文件中 该文件是

年龄,收入,学生,信用评级,课程:购买电脑

青少年,高,不,博览会,无

青少年,高,不,优,无

中年,高,不,优秀,没有

高级,中,不,博览会,是

高级,低,是的,博览会,是

高级,低,是的,优秀的,没有

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("  ");
       }
     }
 }  
}

但输出是

  

给定的表是::: ---

但是如果for改变了这个

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]);
 }

输出

  

给定的表是::: ---   年龄收入学生信用评级:购买电脑

     

青年高不公平否

     

青年高不好不

     

中年高不好不

     

高级媒体不公平是

     

高低是赞成是

     

Senior Low Yes Excellent No

我想知道“为什么System.out.print不是workig ???”...

2 个答案:

答案 0 :(得分:8)

PrintStream that System.out uses有一个内部缓冲区,因为写入stdout是相对昂贵的 - 你不一定要为每个字符做这个。写入换行符时会自动刷新该缓冲区,这就是println导致文本出现的原因。如果没有该换行符,您的字符串就会位于缓冲区中,等待刷新。

您可以通过调用System.out.flush()强制手动刷新。

答案 1 :(得分: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循环执行此操作。我们可以在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(", ");
    }
}

这将写入文件:

青少年,高,不,博览会,无

青少年,高,不,优,无

中年,高,不,优秀,没有

高级,中,不,博览会,是

高级,低,是的,博览会,是

高级,低,是的,优秀的,没有

这可能会让您的生活更轻松(如果我清楚地了解您的需求)。下次请确保比你更多地充实你的问题。

免责声明:我没有测试所有代码,所以如果您发现错误,请告诉我,我会根据需要进行编辑。如果我有时间,我会确保它有效。