如何将此更改从.bin加载到.txt。我想将.txt文件中的信息放入hashmap中,就像.bin文件一样。
public static int currency;
public HashMap<Integer, Shop> cars = new HashMap<Integer, Car>();
public void load() {
try {
@SuppressWarnings("resource")
RandomAccessFile carFile = new RandomAccessFile("data/cars.bin", "r");
int carsAmt = carFile.readShort();
for (int carId = 0; carId < carAmt; carId++) {
int carId = carFile.readShort();
int currency = carFile.readShort();
int[] cars = new int[carFile.readByte()];
int[] amounts = new int[cars.length];
boolean isTruck = carFile.read() == 1;
for (int carData = 0; carData < cars.length; carData++) {
cars[carData] = carFile.readShort();
amounts[carData] = carFile.readInt();
}
cars.put(carId, new Car(carId, currency, isTruck, cars, amounts, true));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Loaded " + cars.size() + " Cars");
}
答案 0 :(得分:2)
bin
和txt
只是名称的一部分。但是,按照惯例,txt
文件包含使用多种字符编码之一格式化的数据。常见的编码是UTF-8和ASCII的扩展。 “编码”只是字节序列到字符的映射。例如,在UTF-8中,a
映射到8位序列01100001
(十六进制的61
)。实际上,所有文件都存储为一系列0
和1
s,但txt
文件通常只根据其编码存储序列。相反,bin
文件将包含以“二进制”格式存储的数据;也就是说,它们中的数据与任何类型的文本编码都不匹配。在您的情况下,bin
文件只包含一组存储为二进制表示的数字(这是一个位或0和1的序列)。
你的问题的答案是你将不得不重写这段代码。由于您现在想要阅读文本文件而不是直接使用二进制值,因此您需要一个能够将txt
文件解码为String
的阅读器,然后您还需要转向那些String
成为数值。 (此步骤称为“解析”。)
您 需要知道txt
文件的编码才能正确读取它。 RandomAccessFile
有一种方法可以读取UTF-8编码文本,但是如果它采用其他编码,则需要查看其他地方。有关使用BufferedReader
的一些信息,请参阅this answer。您可能还会发现Scanner
类很有用。 Scanner
可以在读取值时为您解析值。