我正在使用Java Web服务调用oracle过程来读取一些记录。在Shell脚本的帮助下,自动执行此Java Web服务。 所以流程如下:
Shell脚本调用Java Web服务,进一步的Java Web服务调用Oracle存储过程来读取一些记录。
作为最终产品,会生成一个UTF-8格式的Feed文件,我们需要以ASCII格式创建文件。所以任何人都可以帮助我使用一些Linux或Java代码,我可以将其添加到我的shell脚本或Java代码中,以将文件转换为ASCII。
P.S。我知道在NOTEPAD ++的帮助下将文件从UTF转换为ASCII,但我需要将此过程自动化。任何帮助将受到高度赞赏。
答案 0 :(得分:1)
可以这样做:
Charset srcEncoding = StandardCharsets.UTF_8;
Charset destEncoding = StandardCharsets.US_ASCII;
try (BufferedReader reader = Files.newBufferedReader(Paths.get("src"), srcEncoding);
BufferedWriter writer = Files.newBufferedWriter(Paths.get("dest"), destEncoding)) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
}
答案 1 :(得分:0)
理想的解决方案取决于您当前如何编写文件。 有很多方法。 如果使用字节,可以使用:
byte[] bytes = "somestring".getBytes("characterSetName");
PrintStream方法在构造函数中包含一个字符集名称:
new PrintStream(file,"characterSetName");
在您的情况下,字符集名称将为US-ASCII。
您还可以使用Charset实例在字符集之间进行转换。
举个例子:
public static void main(String[] args) throws Exception {
String textToWrite = "Hello World of encodings...";
CharBuffer cb1 = CharBuffer.wrap(textToWrite);
CharBuffer cb2 = CharBuffer.wrap(textToWrite);
Charset chr = Charset.forName("US-ASCII");
ByteBuffer byteBuffer = chr.encode(cb1);
write("CharsetEncode.txt",byteBuffer);
CharsetEncoder cr = chr.newEncoder();
ByteBuffer byteBuffer1 = cr.encode(cb2);
write("CharsetEncoderEncode.txt",byteBuffer1);
write("StringGetBytes.txt",textToWrite.getBytes("US-ASCII"));
}
public static void write(String name, ByteBuffer buffer) throws Exception {
byte[] bytes = new byte[buffer.limit()];
buffer.get(bytes);
write(name,bytes);
}
public static void write(String name, byte[] bytes) throws Exception {
File f = new File(name);
FileOutputStream fos = new FileOutputStream(f);
fos.write(bytes);
fos.flush();
fos.close();
}
使用BufferedWriter时,可以使用Files.newBufferedWriter。这允许指定字符集。
File targetFile = ....;
BufferedWriter w = Files.newBufferedWriter(targetFile.toPath(), Charset.forName("US-ASCII"));