本文共 5241 字,大约阅读时间需要 17 分钟。
一、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"; Listlist = findAllClassByPackage(packageName); System.out.println(list); } /** * 获取包路径下所有的class */ public static List findAllClassByPackage(String pageAgeName) { List 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; }
转载地址:http://ieuni.baihongyu.com/