2016-07-28 42 views
0

所以我使用下面的代码写入Java文件,文本打印罚款,但它有字母之间的奇怪字符。Java随机访问文件奇怪的字符

public static void foo() throws IOException{ 
    static RandomAccessFile configFile; 
    configFile.writeChars("#Minecraft server properties"); 
    configFile.close(); 
} 

Image

我正在寻找的答案,一切都指向writeUTF()的不正确使用,所以我决定试试,而不是其半固定的问题,但我仍然有字符开头的线。

public static void foo() throws IOException{ 
    static RandomAccessFile configFile; 
    configFile.writeUTF("#Minecraft server properties"); 
    configFile.close(); 
} 

Image

我的问题是:什么是字符? Vim将其显示为@,我能做些什么来删除它?

+1

这是一个长度单词。看到Javadoc。要删除它,请不要使用'writeUTF()'。除非你也使用readUTF()来读取它,否则不要使用'writeUTF()'。 – EJP

+0

'writeChars()'正在写入UTF-16。 *为什么*你使用'RandomAccessFile'而不是'FileWriter'? – Andreas

+0

如果你想编写人类可读的文本,那么RandomAccessFile是一个不错的选择。 – immibis

回答

0

该字符与您正在创建的文件的编码有关。

尝试使用下面的代码来代替:

public static void createConfigFile() throws IOException { 
    FileWriter writer = new FileWriter("PATH_TO_YOUR_CONFIG_FILE", false); 
    writer.append("#Minecraft server properties"); 
    // Append any other content you need here. 
    writer.flush(); 
    writer.close(); 
} 

希望帮助!

0

我写了一个开源库,允许您将字符串转换为Unicode序列,反之亦然。它可以帮助你分析你的问题。在你的java代码中,从有问题的文件中读取String并将其转换为Unicode序列,或者在写入文件之前转换String。这里是文章的链接,解释了在哪里以及如何使用该库。 (这很简单)。 Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。请参见段落字符串Unicode转换器

+0

当链接到您自己的不同网站上的内容时,你不想成为[垃圾邮件发送者](http://stackoverflow.com/help/promotion)。您应该在这里包含大部分内容,并仅将该链接用作参考。并且请注意它*是*您自己的内容。 –

+0

@Paul谢谢,我编辑了答案,以澄清它是我的图书馆。至于内容,我在那篇文章上工作了一段时间,在这种情况下,它只是从文章中复制/粘贴。所以在这个特殊的情况下,我将它留下。但我肯定会接受你的建议,并在文化中写下相应的内容 –