我有点像新手,但我正在尝试允许Java脚本读取的外部.txt文件能够在文件开头有一些注释,以便其他人可以轻松编辑并添加更多的是它。 但是如果文件包含#(为一行注释指定的符号),它只返回错误,即文件中存在“格式错误”(IOException - 所以它超过了第一个“IF”... ) 有人可以帮忙吗?
以下是代码部分,用于处理在脚本中先前调用的.txt文件中的注释行:
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.length() < 1 || line.charAt(0) == '#') { // ignore comments
continue;
}
final String[] parts = line.split("=");
if (parts.length != 2) {
throw new IOException("Format error in file "
+ JLanguageTool.getDataBroker().getFromRulesDirAsUrl(getFileName())
+ ", line: " + line);
}
input.txt文件在第一行打破它:
#This is a Test ឲ្យ|ឱ្យ=អោយ កំពស់=កម្ពស់ កម្នាញ់=កំណាញ់
这是实际的错误:
Caused by: java.io.IOException: Format error in file
文件:/ d:/文件....... / coherency.txt, line:#This是一个测试 at rules.km.KhmerSimpleReplaceRule.loadWords(KhmerSimpleReplaceRule.java:165) at rules.km.KhmerSimpleReplaceRule.loadWords(KhmerSimpleReplaceRule.java:82) ......还有33个
堆栈跟踪错误:
引起:java.io.IOException:Format 文件中的错误 [Ljava.lang.StackTraceElement; @ 1cb2795 在 km.KhmerSimpleReplaceRule.loadWords(KhmereSimpleReplaceRule.java: 169)
答案 0 :(得分:9)
在您的第一个可见角色前面可能有一个UTF-8字节顺序标记。大多数编辑器都不会显示这些字符,因为它只预测内容的编码,Java不会删除UTF-8字节顺序标记(与UTF-16和32不同)。如果确实存在UTF-8 BOM,则必须自行删除这三个字节。
有关详细信息,请参阅Java-Bug 6378911。
答案 1 :(得分:4)
除非有空格,否则这应该有效。 你可以尝试这段代码。
if (line.trim().startsWith("#") { // ignore comments
continue;
}
答案 2 :(得分:2)
这应该有效,除非#
实际上不是该行上的第一个非空格字符(或者你的某个地方有一个非注释行,其中没有或多个=
)。
我只能建议您向我们展示整个例外情况,其中包括其中的实际违规行。你可能也想做到:
+ ", line: [" + line + "]");
所以你确定没有前导空格或尾随空格。此外,异常中的输出line.codePointAt(0)
- 它可能是语言/错误的Unicode代码问题。
您也可以考虑让代码更灵活,以便在行尾添加注释。这是一个简单的问题,即从剪切前的第一个#
到最后一行剥离所有内容,并允许以下内容:
password = xyzzy # super sekrit sauce from zork
答案 3 :(得分:1)
您的代码最初似乎正确... 我可以看到几个选项:
#
不是该给定行的第一个字符。堆栈跟踪和输入文件可能有帮助......
答案 4 :(得分:1)
尝试:
line.indexOf('#') == 0
或者你可以试试:
line.substring(0,0).equals("#")
或显示堆栈跟踪并找到实际答案。