一、io的的介绍
1、网上盗图一张,主要的类结构
二、demo案例总结
1、Reader、Writer
* FileReader/FileWriter : 从文件读字符数据,写入字符数据到文件
* CharArrayReader/Writer:从char数组读数据到字符串缓冲区,写字符串、char数组到字符串缓冲区。
* BufferedReader/BufferedWriter:包装字符流输入输出,内部有buff缓冲
@Test
public void test1() throws IOException {
// 1、FileReader/FileWriter
//Reader reader = new FileReader("");
//Writer writer = new FileWriter("");
// 2、CharArrayReader/Writer
//CharArrayReader charReader = new CharArrayReader("char array".toCharArray());
//CharArrayWriter charWriter = new CharArrayWriter();
// 3、BufferedReader/BufferedWriter
//BufferedReader bufferedReader = new BufferedReader(charReader);
//BufferedWriter wirter = new BufferedWriter(charWriter);
// 4 、基本操作范例
String source = "werrhewgergeorgergerg \r\nwer werwe ";
Reader input = new CharArrayReader(source.toCharArray());
CharArrayWriter output = new CharArrayWriter();
char[] buffer = new char[8061];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
//buffWrap.write(buffer, 0, n);
}
System.out.println(output.toCharArray());
}
2、outputStream, InputStream
* FileInputStream/FileOutputStream : 从文件读取字节流,写入字节流到文件
* ByteArrayInputStream/output : 从bytes数组读数据到字节缓冲区,写字节数组到缓冲区。
* BufferFileInputStream/output: 包装字节流输入输出
* ObjectInputStream/ObjectInputStream:对象流,系列化对象,和反系列化对象
@Test
public void test2() throws Exception {
// 1、FileInputStream/FileOutputStream
//InputStream in = new FileInputStream("file");
//OutputStream out = new FileOutputStream("file");
// 2、ByteArrayInputStream/output
//ByteArrayInputStream in = new ByteArrayInputStream("123".getBytes());
//ByteArrayOutputStream out = new ByteArrayOutputStream();
// 3、ObjectInputStream/ObjectInputStream
// 系列化
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(128);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteStream);
objectOutputStream.writeObject(new Integer(1)); // 此对象必须是实现Serializable
objectOutputStream.flush();
byte[] result = byteStream.toByteArray();
// 反系列化
ByteArrayInputStream intStream = new ByteArrayInputStream(result);
ObjectInputStream objectInputStream = new ObjectInputStream(intStream);
Object dis_result = objectInputStream.readObject();
System.out.println(dis_result); // 1
}
3、OutputStreamWriter、InputStreamReader
* InputStreamReader: 字符串中间流(字节)。
* OutputStreamWriter:字符串输出中间流 (输出字节到字符),(主要还有可以指定字符编码)。
@Test
public void test3() throws Exception {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
// OutputStreamWriter可以从字符串输出到字节流,并且可以指定编码。
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out,"UTF-8"));
String buf=null;
while ((buf = reader.readLine()) != null) {
if (buf.equals("exit"))
break;
writer.write(buf);
writer.newLine();
writer.flush();
}
reader.close();
writer.close();
}
4、字符打印流:PrintWriter
* 构造函数可以传递参数: File, String ,OutputStream, writer
*/
public void test4() throws IOException {
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); //键盘录入
PrintWriter out1 = new PrintWriter(System.out); //标准输出 ,不自动刷新
//PrintWriter out2 = new PrintWriter(System.out, true); //true代表自动刷新 (只能用println,printf,print自动刷新)
String line = null;
while ((line = buff.readLine()) != null) {
if("ok".equals(line))
break;
out1.println(line.toUpperCase());
}
out1.close();
buff.close();
}
5、File类的一些演示
// 1、基本操作
File f = new File(this.getClass().getClassLoader().getResource("").getPath()
+ File.separator + this.getClass().getName().replace(".", File.separator));
System.out.println(f.getParent()); // 本类文件的父级
if (!f.getParentFile().exists()) { // 创建父级目录 -- 文件父目录不存在不可创建文件
f.getParentFile().mkdirs();
}
File[] list = f.getParentFile().listFiles();
for (File file : list) {
System.out.println(file);
}
File f2 = new File(f.getParent()+File.separator+"abc.txt");
f2.createNewFile(); // 创建到了bin下了,在src下看不到的。
// 2、getAbsolutePath和getCanonicalPath区别
File file = new File("../src/java/a.text");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath()); // F:\java001\demo00_javase\..\src\java\a.text
System.out.println(file.getCanonicalPath()); // F:\java001\src\java\a.text
6、获取包路径下的所有class文件
@Test
public void test6() {
String packageName = "com";
List<String> list = findAllClassByPackage(packageName);
System.out.println(list);
}
/**
* 获取包路径下所有的class
*/
public static List<String> findAllClassByPackage(String pageAgeName) {
List<String> result = new ArrayList<>();
String classPath = IO.class.getClassLoader().getResource("").getPath();
File file = new File(classPath + File.separator + pageAgeName.replace(".", File.separator));
if (!file.exists()) {
return result;
}
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (!files[i].isDirectory()) {
String className = files[i].getPath().replace(classPath.substring(1).replace("/", "\\"), "").replace("\\", ".")
.replace(".class", "");
result.add(className);
} else {
result.addAll(findAllClassByPackage(pageAgeName + "." + files[i].getName()));
}
}
return result;
}