gpt4 book ai didi

java - 通过 NFS 共享挂载将数据刷新到文件时的特殊字符

转载 作者:太空宇宙 更新时间:2023-11-04 09:25:00 25 4
gpt4 key购买 nike

我们的应用程序读取 XML 文件并将文本文件作为输出写入共享 NFS 文件系统。应用程序运行的 RHEL 版本为 7.6,NFS 为 veritas Access 版本 7.2 和 7.4(在两个环境上都有问题),NFS 服务器操作系统为 RHEL 7.2 和 RHEl 7.4(在两个环境上都有问题)

在实际写入文件之前已检查要写入文件的值。检索到的数据是正确的。一旦写入文件后,就会得到特殊字符。 (并不是一直都是同一个角色)

Veritas、RHEL 或 JAVA 上是否有任何可疑之处?请分享是否有任何可用的故障排除程序。

用于写入文件的Java API是Printwriter

已尝试所有可以匹配 NFS 服务器和 RHEL 客户端的编码。尝试了所有java编码JVM参数尝试所有文件打开关闭和刷新机制。将JAVA api更改为FileOutPutStream,并通过存储在StringBuilder中写入数据。

即使在尝试了所有可能的解决方案之后。但问题仍然存在。

代码:

osw = new OutputStreamWriter(new FileOutputStream(outFile, true), "ISO-8859-1");
coldelimiter = "\t";
rowdelimiter = "\n";

writer = new PrintWriter(new BufferedWriter(osw));

while (iterator.hasNext()) {

final DataToWrite data = iterator.next();
writer.write(data.getDataName());
writer.write(coldelimiter);

}
writer.write(rowdelimiter);
writer.flush();

预期:

testSystem testSystem 1 14 1 ManagedSystem 1 1 1310 2019-04-10 01:00:00 2019-04-10 10 Alpha testSystem +0100 1 0 4 15 29201 15MIN 2019-04-10 00:00:00 2019 13

实际:

测试系统测试系统1 14 1管理系统1 1 1310 2019-04-10 01:00:00 2019-04-10 10 Alpha Testsystem +0100 1 0 4 15 29201 15min 2019-04-10 004-10 00:00:00:00 2019 13 2019 13

我希望末尾有新行 [\n ],但有时像 `q,) 等垃圾字符会被附加到随机列中。

最佳答案

该代码看起来不错,理论上只有 rowdelimiter 可能会被覆盖,但为什么会出现一些随机字符。

您正在追加,但如果存在错误(例如文件结束字符),则追加后仍然会显示换行符。

如果数据没有错误的话,可能是读码的问题。使用反引号+q,它看起来像数据。

注意到:- 对于特殊的 Windows-Latin-1(和浏览器 Latin-1),可以使用 Windows-1252 i.o. ISO-8859-1。- Linux 上的换行符是 "\n",Windows 上的换行符是 "\r\n"。

    osw = new OutputStreamWriter(new FileOutputStream(outFile, true), "Windows-1252");
final String coldelimiter = "\t";
final String rowdelimiter = "\r\n";
writer = new PrintWriter(new BufferedWriter(osw));

或者使用更封闭、更不易出错的代码:

final String coldelimiter = "\t";
final String rowdelimiter = "\r\n";
Charset charset = StandardCharsets.ISO_8859_1;
Path outPath = outFile.toPath(); // File outFile
Path outPath = Paths.get(outFile); // String outFile

try (BufferedWriter osw = Files.newBufferedWriter(outPath, charset,
StandardOpenOptions.APPEND, StandardOpenOptions.CREATE);
PrintWriter writer = new PrintWriter(osw)) {

while (iterator.hasNext()) {
final DataToWrite data = iterator.next();
writer.write(data.getDataName());
writer.write(coldelimiter);
...
writer.write(rowdelimiter);
writer.flush();
}
} // Automatic close, also on exception

关于java - 通过 NFS 共享挂载将数据刷新到文件时的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57819398/

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