java read file ----为什么我的代码有效

时间:2015-06-20 15:55:09

标签: java file-io

我是Java新手。我正在学习fileIO。我正在写一个小程序来显示txt文件中的内容。我的代码如下:

import java.io.*;

public class Readf {
    public static void main(String arg[]) throws IOException {
            FileInputStream in = null ;
            try {
                    in = new FileInputStream("input.txt");
                    int c;
                    String cs="";
                    while ((c=in.read())!=-1) {
                            cs = cs + (char)c;
                            if ((char)c=='\n') {
                                    System.out.println(cs);
                                    cs="";
                            }
                    }

            } finally {
                    if (in != null) {
                            in.close();
                    }
            }
    }
}

我正在阅读在线教程。它告诉我用int变量读取文件。因为我想在char中显示内容,所以我将它们转换为char类型并将其存储到sting中并且它已经工作了!在Java中,int变量是32位,但char变量是16位。每当我读取32位int时,我将它们转换为16位字符。为什么结果不是混乱?

3 个答案:

答案 0 :(得分:1)

检查FileInputStream类中的read()方法描述:

FileInputStream.read()

正如您在规范中所看到的,读取方法"从此输入流中读取一个字节的数据"这意味着程序中的所有内容(c变量)将始终小于或等于255且大于或等于0.如果您读取txt文件或pdf,png等,则无关紧要。

您可以通过在c大于255时尝试打印来检查它,例如:

if (c > 255) {
    System.out.println("c>255");
}

和" c> 255"永远不会被打印出来。

因为int已签名,您还可以检查c是否小于零。

if (c < 0) {
    System.out.println("c<0");
}

再次&#34; c&lt; 0&#34;永远不会打印出来。

当然只有最后一个int为-1​​。

因此,范围&lt; 0,255&gt;范围内的每个int都是可以安全地转换为char而不会丢失任何信息。

答案 1 :(得分:0)

您可能保留在文件中的所有字符都在java工作的16位unicode字符集的范围内。因此,将char(16位)转换为int(32位)或反之亦然。

答案 2 :(得分:0)

实际上,我尊重你坚持理解而不是仅仅获得所需的输出。

问题在于,您扫描的每个字符的ascii值都低于2 ^ 8,这使得它适合int 32位并且适合char 16位。 你所采取的混乱将出现在一个ascii值适合32位而不是16位的情况下,它不会存在于ascii字符集中,而是存在于unicode中。

check the ascii table