我怎样才能使它如此这个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 将日期时间作为数字返回,我怎样才能使它成为正确的日期?