gpt4 book ai didi

使用 FileWriter 进行 Java UTF-8 编码

转载 作者:行者123 更新时间:2023-12-01 11:59:05 25 4
gpt4 key购买 nike

我目前正在用 java 制作一个带有随机世界生成的游戏,在游戏开始时我希望它存储图 block ID、X 位置和 Y 位置,以便当我重新加载游戏时它会能够再次生成它。

当我编写文件时,一切正常,但我有一个问题,文件的输出是一种奇怪的字符组合。

代码:

import java.io.*;

public class FileWrite {
public static FileWriter writeFile;
public static BufferedWriter write;

public static void recordItem(int blockID, int blockX, int blockY, String filePath, String fileName) throws Exception {
writeFile = new FileWriter("res/save/" + filePath+ fileName, true);
write = new BufferedWriter(writeFile);

write.write(blockID);
write.write(blockX);
write.write(blockY);
write.newLine();
write.flush();
}
}

文件中的输出:

 @ 
`
?
 
?
?
?
?
?
?
?
?

如何将 FileWriter 编码为 UTF-8 以使其显示数字?谢谢您的帮助。 :)

最佳答案

只是一个建议,如果您想为持久信息提供更健壮的形式,您可以考虑对象序列化。这比听起来容易。只需有一个实现 Serialized 的静态内部类,如下所示:

static class JunkRec implements Serializable
{
private static final long serialVersionUID = 1L;
final int _blockID, _blockX, _blockY;
final String _filePath, _fileName;
public JunkRec(int blockID, int blockX, int blockY,
String filePath, String fileName)
{
_blockID = blockID;
_blockX = blockX;
_blockY = blockY;
_filePath = filePath;
_fileName = fileName;
}
@Override
public String toString() {
return String.format("id=%08d x=%04d y=%04d fp=%s fn=%s",
_blockID, _blockX, _blockY, _filePath, _fileName);
}
}

现在,一种存储 JunkRec 的方法...

public static void storeJunk(JunkRec jr)
{
try (
FileOutputStream fos = new FileOutputStream(
jr._filePath + jr._fileName + ".ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);) {
oos.writeObject(jr);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

另一种恢复 JunkRec 的方法,给定文件名。

public static JunkRec retrieveJunk(String filePath, String fileName)
{
try (
FileInputStream fis = new FileInputStream(
filePath + fileName + ".ser");
ObjectInputStream ois = new ObjectInputStream(fis);) {
return (JunkRec) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}

最后在 main() 中有一个小测试驱动程序...

public static void main(String[] args)
{
// generate and restore 10 records
Random r = new Random();
List<String> names = new ArrayList<>();
/* do a few in two ways */
for (int i = 0; i < 5; ++i) {
int blk = r.nextInt(10000);
String fname = String.format("BLKID_%02d", i);
if (names.add(fname)) {
JunkRec jr = new JunkRec(
r.nextInt(10000),
r.nextInt(50),
r.nextInt(50),
"/tmp/",
fname);
storeJunk(jr);
System.out.println("Wrote: "+jr);
}
}

/* read them all back */
for (String fname : names) {
JunkRec jr = retrieveJunk("/tmp/", fname);
System.out.println("Retrieved: " + jr + " from " + fname);
}

/* clean up */
for (String fname : names) {
((File) new File("/tmp/" + fname + ".ser")).delete();
}
}

这不是生产质量的代码,但它显示了序列化是多么容易。虽然存在一些问题,但总的来说,序列化是基于文件的持久性的可靠解决方案。

只是一个建议。 玩得开心!

关于使用 FileWriter 进行 Java UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com