最近,学习了关于I/O的一些基础知识
只要是有XXXStream的都是一些字节流
XXXreader、XXXWriter 都是一些字符流
1、获取bin目录、实例化输出流和输入流、实例化StringBuffer用来存储数据,在进行输出。
public static void main(String[] args) {
// TODO Auto-generated method stub
// 如何获得项目中磁盘中的信息
String path = AFileInputStreamDemo.class.getResource("/").getPath()
.substring(1);
String filePath = path + "readme.txt";
System.out.println(filePath);
try {
FileInputStream fis = new FileInputStream(filePath);
FileReader fr = new FileReader(filePath);
int c = 0;
StringBuffer sb = new StringBuffer();
String info = "";
while ((c = fr.read()) != -1) {
sb.append((char) c);
}
// byte[] infoArr = new byte[1024];
// while ((c = fis.read(infoArr, 0, infoArr.length)) != -1) {
// String iString = new String(infoArr);
// // infoArr = iString.getBytes(); 字符串与byte[]数组相互转换
// sb.append(iString);
// }
System.out.println(sb.toString());
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、ObjectOutputStream/ObjectInputStream、、对实体进行输入输出
// TODO Auto-generated method stub
Student student = new Student("wjj", 22, 23.3);
try {
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("G:\\student.txt"));
oos.writeObject(student);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"G:\\student.txt"));
Student student2 = (Student) ois.readObject();
System.out.println("姓名:" + student2.getName() + "\n学号"
+ student2.getId() + "\n分数" + student2.getScore());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
3、IO链、就是在一个输入输出流嵌套一个其他流、使得读写更有效率
// TODO Auto-generated method stub
// String path = CDuXieZiFuLiu.class.getResource("/com/jereh/ch05/")
// .getPath().substring(1);
// path += "Theme.template";
String path = CDuXieZiFuLiu.class.getResource("/").getPath()
.substring(1);
String filePath = path + "Theme.template";
String desFilePath = path + "Theme.html";
StringBuffer sb = new StringBuffer();
int c = 0;
try {
FileReader fr = new FileReader(filePath);
FileWriter fw = new FileWriter(desFilePath);
// BufferedWriter bw = new BufferedWriter(fw);
BufferedWriter bw = new BufferedWriter(new FileWriter(filePath));
BufferedReader br = new BufferedReader(new FileReader(desFilePath));
while ((c = br.read()) != -1) {
sb.append((char) c);
}
String string = sb.toString();
string = string.replace("{title}", "主题").replace("{desc}", "描述");
// for (int i = 0; i < string.length(); i++) {
// fw.write(string.charAt(i));
// }
// fw.write(string);
bw.write(string);
// bw.flush();
// fw.close();
bw.close();// 会执行flush()并且会关闭其他的书写流
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
4、InputStreamReader的用法, 就是把字节流转换为字符流来进行操作 // TODO Auto-generated method stub
InputStream is = FInputStreamReader.class
.getResourceAsStream("readme.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
int c;
try {
while ((c = br.read()) != -1) {
sb.append((char) c);
}
br.close();
System.out.println(sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
最近学习IO的时候,遇到一个问题,不知道是小问题还是大问题,原因一直没查
在对象声明上不知道哪的问题,下面附图
上面运行后,list里面的值都是一样的
而下面,就是预期的结果。
最近比较忙,呵呵。过后自己查