字符流
字符输入流
Reader
Demo:
public class ReaderDemo {
public static void main(String[] args) {
FileReader reader = null;
FileWriter writer = null;
try {
reader = new FileReader("c:/a.txt");
char[] buf = new char[16];
int len = -1;
while ((len = reader.read(buf)) != -1) {
System.out.print(new String(buf, 0, len));
}
writer = new FileWriter("c:/a.txt");
writer.write("你好");
writer.write(98);
writer.flush();
writer.write(new char[] { '啊', '你', '好' });
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符输出流
Write
public class CopyString {
public static void main(String[] args) {
File file = new File("src/com/rair/CopyString.java");
File desDir = new File("c:/");
copyFile(file, desDir);
}
private static void copyFile(File file, File desDir) {
FileReader reader = null;
FileWriter writer = null;
try {
reader = new FileReader(file);
writer = new FileWriter(new File(desDir, file.getName()));
char[] buf = new char[4096];
int len = -1;
while ((len = reader.read(buf)) != -1) {
String msg = new String(buf, 0, len);
msg = msg.replaceAll("\\d", "").toUpperCase();// 去掉数字转成大写
writer.write(msg);
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
转换流
InputStreamReader
InputStreamReader有两个主要的构造函数:
InputStreamReader(InputStream in)
// 用默认字符集创建一个InputStreamReader对象
InputStreamReader(InputStream in,String CharsetName)
// 接受已指定字符集名的字符串,并用该字符集创建对象
Main.java
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("c:/a.txt");
InputStreamReader reader = new InputStreamReader(fis, "gbk");
BufferedReader br = new BufferedReader(reader);
String line = br.readLine();
System.out.println(line);
// 编码
byte[] bytes = line.getBytes("gbk");
// 解码
String string = new String(bytes, "utf-8");
System.out.println(string);
}
}
OutputStreamWrite
OutputStreamWriter也有对应的两个主要的构造函数:
OutputStreamWriter(OutputStream in)
// 用默认字符集创建一个OutputStreamWriter对象
OutputStreamWriter(OutputStream in,String CharsetNarme)
Demo.java
public class Demo {
public static void main(String[] args) throws IOException {
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("c:/a.txt"), "utf-8"));
bfw.write("字符转字节");
bfw.flush();
bfw.close();
}
}
从键盘读取数据,类似Scanner
public class SystemInDemo {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in, "utf-8"));
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(
"c:/a.txt"), true));
String line = "";
System.out.println("请输入:");
while ((line = reader.readLine()) != null) {
if (line.equals("q")) {
break;
}
// 只写整型数字
if (line.matches("\\d+")) {
writer.write(line);
writer.newLine();
writer.flush();
} else {
System.out.println("请输入数字");
}
}
reader.close();
writer.close();
}
}