java基础review(3)---IO基本总结

一、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;
	}

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值