我怎样才能使它如此这个java程序将读取二进制文件的其余部分,而不是添加额外的空格?

Posted

技术标签:

【中文标题】我怎样才能使它如此这个java程序将读取二进制文件的其余部分,而不是添加额外的空格?【英文标题】:How can I make it so this java program will read the rest of the binary file, and not add extra spaces? 【发布时间】:2021-11-13 07:35:23 【问题描述】:

我正在尝试创建一个代码,该代码将采用包含卡数据的二进制文件,并返回带有空格的卡号和校验和值。当我运行测试用例时,它将停止使用其中一个测试用例。我怎样才能让它完成循环?

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class CardNumber

    public static void main(String[] args) throws IOException 
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter a filename");
        String input = keyboard.nextLine();

        FileInputStream basic = new FileInputStream(input);
        DataInputStream inputFile = new DataInputStream(basic);
        boolean eof = false;
        long data = inputFile.readLong();
        String s;
        while (!eof) 
            try 
                while (true) 

                    s = String.valueOf(data);
                    data = inputFile.readLong();
                    System.out.print("Credit card number: ");
                    for (int i = 1; i <= s.length(); i++) 
                        System.out.print(s.charAt(i - 1));
                        if (i % 4 == 0 && i != s.length()) 
                            System.out.print(" ");
                        
                    
                    System.out.print("\n");
                    int sum = 0;
                    int len = s.length();
                    for (int i = len - 2; i >= 0; i -= 2) 
                        int d = (s.charAt(i) - '0') * 2;
                        d = d % 10 + (d / 10) % 10;
                        sum += d;
                    
                    for (int i = len - 1; i >= 0; i -= 2) 
                        sum += s.charAt(i) - '0';
                    

                    System.out.println("Checksum: " + sum);
                    System.out.print("Card status: ");
                    if (sum % 10 == 0)
                        System.out.println("VALID");
                    else
                        System.out.println("INVALID");
                    //With this line of code it will not read the last line and I do not know why.

                
            
            catch (IOException e)
            
                eof = true;
            
        


    

【问题讨论】:

使用其中只有一个数字的输入文件,并使用调试器逐步执行您的程序。你会看到出了什么问题。 【参考方案1】:

根据文档ReadLong,读取 8 个字节,如果输入流中少于 8 个字节,则抛出 EOF 异常。也许您的二进制文件中的最后一项少于 8 个字节?

【讨论】:

OP有一个基本的逻辑错误。

以上是关于我怎样才能使它如此这个java程序将读取二进制文件的其余部分,而不是添加额外的空格?的主要内容,如果未能解决你的问题,请参考以下文章

Api 将日期时间作为数字返回,我怎样才能使它成为正确的日期?

UICollectionView 太宽。我怎样才能使它成为设备的宽度?

鼠标拖动选择不适用于触摸设备。我怎样才能使它成为可能?

java 读取大文件时怎么样才能加快速度?

windows 窗体刷新 - 我怎样才能使它更平滑?

我怎样才能使它只有登录用户才能查看他自己的成绩?