Java UTF-8读写文本文件

本文提供了一个Java方法,用于从文件中读取字符串并将其追加到StringBuilder中,最后返回构建的字符串。同时展示了如何将Java代码转换为特定文件,包括文件路径和编码设置。
private String readStringFromFile(File file) {
BufferedReader br = null;
InputStreamReader isr = null;
StringBuilder builder = new StringBuilder();
try {

isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
br = new BufferedReader(isr);

String line = null;
while((line = br.readLine()) != null) {
builder.append(line);
}

return builder.toString();
} catch(Exception e) {
return null;
} finally {

if(isr != null) {
try {
isr.close();
}catch(Exception e) {}
}

if(br != null) {
try {
br.close();
}catch(Exception e) {}
}
}
}

private void writeJavaClassFile(final String code) {
try {
FileOutputStream os = new java.io.FileOutputStream(javaClassFile); 
BufferedWriter bw = new BufferedWriter(new java.io.OutputStreamWriter(os, "UTF-8"));
bw.write(code);
bw.close();
os.close();
} catch (IOException e) {
}
}
### Java 文件读写 UTF-8 编码 在使用 Java 进行文件读写操作时,若需处理 UTF-8 编码的文件,特别是包含 BOM(Byte Order Mark)头的文件,则需要特别注意字符编码的指定和处理方式。以下是实现 UTF-8 文件读写的几种常见方法。 #### 使用 `InputStreamReader` 和 `OutputStreamWriter` Java 的 `FileReader` 和 `FileWriter` 类不支持直接指定字符编码,因此无法确保以 UTF-8 格式读写文件。为了解决这个问题,可以使用 `InputStreamReader` 和 `OutputStreamWriter`,它们允许通过构造函数指定编码方式。 ##### 示例:读取 UTF-8 文件 ```java import java.io.*; public class UTF8Reader { public static String readTxt(String fileName) { try { StringBuffer sb = new StringBuffer(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8")); while (true) { String line = br.readLine(); if (line == null) { break; } sb.append(line + "\n"); } br.close(); return sb.toString(); } catch (IOException e) { throw new RuntimeException(e); } } } ``` 此代码片段中,`InputStreamReader` 被用来将字节流转换为字符流,并明确指定了使用 UTF-8 编码进行解码 [^2]。 ##### 示例:写入 UTF-8 文件 ```java import java.io.*; public class UTF8Writer { public static void writeTxt(String fileName, String content) { try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8")); bw.write(content); bw.close(); } catch (IOException e) { throw new RuntimeException(e); } } } ``` 在这个例子中,`OutputStreamWriter` 用于将字符流转换为字节流,并且也指定了 UTF-8 编码进行编码 [^3]。 #### 处理 BOM 头 当处理带有 BOM 头的 UTF-8 文件时,可能会遇到非法字符 `\ufeff` 的问题。这是因为一些文本编辑器(如 Notepad)在保存 UTF-8 文件时会添加 BOM 头,而 Java 在读取时将其识别为第一个字符。 一种解决办法是在读取文件内容后立即检查并移除该字符: ```java String content = readTxt("test.txt"); if (content.startsWith("\uFEFF")) { content = content.substring(1); } ``` 此外,在 Windows 系统中,可以通过命令行工具 `chcp` 将当前控制台的活动代码页设置为 UTF-8(65001),以便正确显示 UTF-8 编码的内容: ```cmd chcp 65001 ``` 需要注意的是,这种方式仅对当前控制台会话有效 [^1]。 #### 总结 为了确保 Java 应用程序能够正确地读写 UTF-8 编码的文件,建议始终使用 `InputStreamReader` 和 `OutputStreamWriter` 并显式指定编码方式。同时,对于带有 BOM 头的文件,应采取适当措施去除或处理 BOM 字符,以避免解析错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值