java输入输出中的差异

时间:2017-05-04 05:53:29

标签: java io stream

String text;
try {
    PrintStream pw2 = new PrintStream(new FileOutputStream("C:\\Users\\jadit\\Desktop\\ts.doc"));
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    text = br.readLine();          //Reading String  

    System.out.println(text);
    pw2.print(text);
    pw2.close();
    isr.close();
    br.close();
    }
catch(Exception e) {
    System.out.println(e);
}

int str;

try {     
    FileInputStream fr2 = new FileInputStream("C:\\Users\\jadit\\Desktop\\ts.doc"); 
    BufferedInputStream br2 = new BufferedInputStream(fr2);
    PrintStream pw1 = new PrintStream(System.out, true);

    while ((str=br2.read()) >= 0)
        pw1.println("   "+str);

    fr2.close();
    pw1.close();
    br2.close();
}
catch(Exception e){}

输出:

run:
a b c d 
a b c d 
   97
   32
   98
   32
   99
   32
   100
   32

如果我试图在第二个尝试块中读取其他文件的内容,例如 t.txt ,那么它就不会执行或读取文件的内容 t.txt < / em>,但是当我正在读取在第一个try块中写入的同一文件的内容时,它将在输出中显示如上所示的内容。因此,即使在第一次尝试阻止本身并且在下一个尝试块中打开流时,为什么会发生这种情况呢?我们不能在同一个程序中的不同文件上以不同的方式工作吗?

2 个答案:

答案 0 :(得分:0)

如果我对您的要求的理解是正确的,那么

  1. 尝试从标准输入读取内容并将其写入文件。
  2. 尝试从文件中读取内容并将其写入标准输出。
  3. 从标准输入中读取内容并将其写入文件可以正常工作,但是您无法从文件中读取内容并将其写入标准输出。

    以下代码将帮助您实现第二部分。

        try 
        {
            FileReader fr = new FileReader("C:\\Users\\jadit\\Desktop\\ts.doc");
            BufferedReader br = new BufferedReader(fr);
    
            String str = null;
            while ((str = br.readLine()) != null)
            {
                System.out.println(str);
            }
    
            fr.close();
            br.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    

答案 1 :(得分:0)

好吧,你的第二个尝试catch块是打印文件中文本的ascii值,因为你打印'str'而不将其转换为字符

你需要做的是替换pw1.println(“”+ str);有了这个:

char c =(char)str;

pw1.println(“”+ c);

它将为您提供文件内容而不是其ascii值。