Java从文件中读取长数据从数字前面删除了0

时间:2015-04-05 00:24:05

标签: java inputstream long-integer

我试图从一个应该是二进制数的文件中读取一组long,但是,如果它们从0开始,那么开头的0将被删除(即0101变为101)。如何解决这个问题,以便正确读取它们,以便不删除0?这是我从文件中读取的代码:

public static ArrayList<Long> readInputFile() throws IOException {
    ArrayList<Long> inputList = new ArrayList<>();
    Long readNew;
    final String INPUT_FILE_NAME = "testFile9.dat";
    try (FileInputStream fis = new FileInputStream(INPUT_FILE_NAME)) {
        Scanner inputFile = new Scanner(fis);
        while (inputFile.hasNext()) {
            try {
                readNew = inputFile.nextLong();
                inputList.add(readNew);
            } catch (NoSuchElementException nsee) {
                throw new NoSuchElementException("[NSE ERROR]:  No Long Found in Input File  " + nsee);
            } //end Time of Arrival try-catch
        }
    } catch (FileNotFoundException fnf) {
        throw new FileNotFoundException("[FNF ERROR]: Input File Not Found  " + fnf);
    }
    return inputList;
} //End readInputFile

对于测试,我试图读取值0101 1011 0100 1100;然后在输出时变为101,1011,100和1100.

3 个答案:

答案 0 :(得分:0)

您可以将其作为String读取,然后将其解析为long:

readNew = Long.parseLong(inputFile.next(), 2);
inputList.add(readNew);

它总是可以转换回二进制显示。

您也可以将它们作为字符串读取并将它们存储为字符串,以保留所有内容。

答案 1 :(得分:0)

您将数据从十进制转换为二进制,然后从二进制转换为十进制。第二步应该指定所需的位数。领先的十进制零没有神奇地保留在Long.里面。它们不可能。二进制值不具有十进制数字。它们有二进制数字。

答案 2 :(得分:0)

您可以使用Long的toBinaryString()方法,它将返回long参数的字符串表示形式作为基数2中的无符号整数。

要使用此方法,请尝试将其放入while循环中:

Long.toBinaryString(readNew);

然后在那时你可以放一个println语句(在while循环中)来查看更改:

System.out.println(readNew)