FileInputStream和FileOutputStream Java

时间:2014-12-08 11:12:25

标签: java fileinputstream fileoutputstream

我有一个输入文件,在第一行包含一个整数(n),在第二行包含n个整数。

示例:

7
5 -6 3 4 -2 3 -3

问题是我的数据被损坏了#34;我一直在使用新文件(路径),但我尝试将我的代码提交给在线编译器以对其运行一些测试并新文件(路径)< / strong>代表那里的安全问题。谢谢。

public static void main(String[] args) throws IOException {
        FileInputStream fin=new FileInputStream("ssm.in");
        int n;
        n = fin.read();
        a = new int[100];
        for(int i=1;i<=n;i++)
            a[i]=fin.read();
        fin.close();
}

编辑:当我尝试打印数组时,结果应为:

5 -6 3 4 -2 3 -3

相反,它是:

13 10 53 32 45 54 32 51 32 52 32 45 50 32 51 32 45 51 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

1 个答案:

答案 0 :(得分:1)

您的文件可能包含纯文本数据(可能是ASCII),如下所示:

7
5 -6 3 4 -2 3 -3

如果使用FileInputStream打开文件并使用read()方法从文件中读取单个字节,实际得到的是ASCII字符的编号。您看到的许多-1意味着文件中没有任何内容可供阅读。

您实际想要做的是将ASCII文本转换为数字。为此,您不应该阅读二进制数据,而应该阅读涉及charString的内容,例如FileReaderBufferedReader。而且您需要涉及Integer.parseInt()

以下清单显示了如何从文本文件中读取单个数字:

import java.io.*;

public class ReadNumber {
    public static void main(final String... args) throws IOException {
        try (final BufferedReader in = new BufferedReader(new FileReader(args[0]));
            final String line = in.readLine();
            final int number = Integer.parseInt(line);
            System.out.format("Number was: %d%n", number);
        }
    }
}

您可以根据需要更改此源代码。您可能还想了解Scanner类和String.split()方法。