变量是什么;“数据”;存储在这个java程序中?

变量是什么;“数据”;存储在这个java程序中?,java,file,fileinputstream,Java,File,Fileinputstream,我的代码正在运行。我只需要知道特定变量在代码中的作用 我试图打印变量“data”中的值,但它给出了一些我无法理解的数字 public static void main(String[] args) throws IOException { FileInputStream fileinputstream = new FileInputStream ("c:\\Users\\USER\\Desktop\\read.TXT"); FileOutputStream fileoutpu

我的代码正在运行。我只需要知道特定变量在代码中的作用

我试图打印变量“data”中的值,但它给出了一些我无法理解的数字

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

    FileInputStream fileinputstream = new FileInputStream ("c:\\Users\\USER\\Desktop\\read.TXT");

    FileOutputStream fileoutputstream = new FileOutputStream("c:\\Users\\USER\\Desktop\\write.TXT");

    while (fileinputstream.available() > 0) {
        int data = fileinputstream.read();                                                       
        fileoutputstream.write(data);
    }

    fileinputstream.close();
    fileoutputstream.close();
}
从基础文件中读取单个字节的信息

由于这些文件是文本文件(根据其扩展名),您可能应该使用
FileInputStream
,而不是a来正确处理字符,而不是组成字符的字节。

您可以查看for
FileInputStream.read
,其中说明:

从该输入流读取一个字节的数据。如果没有可用的输入,此方法将阻止

返回:

数据的下一个字节,如果到达文件末尾,则为-1

因此,您得到的整数(即存储在
数据中的数字)是从文件中读取的字节。由于您的文件是文本文件,因此它是该文件中字符的ASCII值(假设您的文件是用ASCII编码的)。

fileinputstream.read()返回“数据的下一个字节,如果到达文件末尾,则返回-1。”


您可以阅读更多

fileinputstream.available()
这里肯定没有正确使用。只需阅读该方法的Javadoc即可。它从流中读取下一个字节,解释为
int
,从
0
255
。这就是
数据
存储的内容。
for(int data;(data=fileinputstream.read())!=-1;{fileoutputstream.write(data);}
将是读取数据的正确方法。(未测试。)请注意,这将是一个熟悉逐步调试程序的绝佳机会,该调试程序将能够向您显示
数据
变量在不同执行步骤中持有的不同值。很多CS课程从来没有真正涉及到调试器的主题,但它们是一个巨大的帮助,所以我真的鼓励你看看它们,如果你还没有
,它给了我一些我无法理解的数字,那是因为你在读二进制代码。这很好,文件副本也可以工作,但是如果你想理解数据,你必须将其转换为文本字符。“假设你的文件是用ASCII编码的”:是的,但不太可能。但是,如果您不知道字符编码,那么对文本文件进行任何处理(复制或转储字节除外)都没有意义。@TomBlodget我知道,但是当文件使用编码时,我很难满意地解释字节是什么,因为一个字符使用多个字节(每个字节都是字符的一部分?),所以我选择了一个简单的方法。。。