Java 学习之IO类基础(一)

来源:互联网 发布:php试题库管理系统 编辑:程序博客网 时间:2024/05/27 21:46

今天整理了一下java中IO类中的一些基本的知识点和一些类和方法的使用。


其中也借鉴了别人的博客: http://blog.csdn.net/pistolove/article/details/62210164


Java中IO操作通常指的是使用java 对数据进行读写操作,机制就是通过数据流进行读写。

何谓数据流呢,数据流就是表示字节或者字符的流动序列

简而言之:数据流就是包括输入流和输出流的有序的有起点和有终点 的字节的数据序列

当程序需要读取数据时就要创建一个通向数据源的连接,这个数据源可以是 文件,也可以是内存,也可以是网络连接,当程序需要写入数据的,也需要创建一个通向目的地i的连接。


流序列中的数据既可以是未经加工的原始二进制数据,也可以是经过一定编码的符合某种格式的特定数据,Java中的流分为两种

1.字节流: 数据流中最小的数据单元是字节

2.字符流: 数据流中最小的数据单元是字符, java中的字符是Unicode编码,一个字符占用连个字节


基于字节的输入输出流

比较常用的字节的输入流有:

1. FileInputStream(文件输入流)

2. ByteArrayInputStream (字节数组输入流)

3. BufferedInputStream (缓冲输入流) 

以上三个字节输入流都是继承自 InputStream 


下面是字节流的练习

public static void test01(){String rootPath = System.getProperty("user.dir");File file1 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"1.json");File file2 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"2.json");FileInputStream in = null;FileOutputStream out = null;try {in = new FileInputStream(file1);boolean flag = file2.exists();out = new FileOutputStream(file2);byte[] buff = new byte[2048];while(in.read(buff)!=-1){out.write(buff);}System.out.println("写入完毕");in.close();out.close();} catch (Exception e) {e.printStackTrace();} finally {if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}


public static void test02(){ByteArrayInputStream in = null;ByteArrayOutputStream out = null;String str = "我爱你 nsi";byte[] buff = new byte[20480];try {in = new ByteArrayInputStream(str.getBytes());out = new ByteArrayOutputStream();while(in.read(buff)!=-1){out.write(buff);}System.out.println("写入完毕了");System.out.println(out.toString());in.close();out.close();} catch (Exception e) {e.printStackTrace();} finally {if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}


public static void test03(){String rootPath = System.getProperty("user.dir");File file1 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"1.json");File file2 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"2.json");BufferedInputStream in = null;BufferedOutputStream out = null;try {in = new BufferedInputStream(new FileInputStream(file1));out = new BufferedOutputStream(new FileOutputStream(file2));byte[] buff = new byte[1024];while(in.read(buff)!=-1){out.write(buff);}System.out.println("写入完毕");in.close();out.close();} catch (Exception e) {e.printStackTrace();} finally {if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}


下面是字符流的练习


/**
* 基于字符的输入输出流
* 输入流: 
* 1. FileReader
* 2. InputStreamReader
* 3. StringReader
* 输出流
* 1. FileWriter
* 2. OutputStreamWriter
* 3. StringWriter
*/

public static void test04(){String rootPath = System.getProperty("user.dir");File file1 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"1.json");File file2 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"2.json");FileReader reader = null;FileWriter writer = null;char[] chaff = new char[2048];try {reader = new FileReader(file1);writer = new FileWriter(file2);while(reader.read(chaff)!=-1){writer.write(chaff);}System.out.println("写入完毕");reader.close();writer.close();} catch (Exception e) {e.printStackTrace();} finally {if(reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}if(writer!=null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}


public static void test05(){String rootPath = System.getProperty("user.dir");File file1 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"1.json");File file2 = new File(rootPath+File.separator+"template"+File.separator+"json"+File.separator+"3.json");InputStreamReader isr = null;OutputStreamWriter osw = null;char[] chaff = new char[2048];try {//多种实现//isr = new InputStreamReader(new FileInputStream(file1));//isr = new InputStreamReader(new BufferedInputStream(new FileInputStream(file1)));isr = new InputStreamReader(new ByteArrayInputStream(new String("三块经销商njkk214  &&%%NJKBAS  寸你看电视剧").getBytes()));//osw = new OutputStreamWriter(new FileOutputStream(file2));osw = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(file2)));//osw = new OutputStreamWriter(new ByteArrayOutputStream());if(isr.read(chaff)!=-1){osw.write(chaff);}System.out.println("写入成功");osw.flush();System.out.println(osw.toString());isr.close();osw.close();} catch (Exception e) {e.printStackTrace();} finally {if(isr!=null){try {isr.close();} catch (IOException e) {e.printStackTrace();}}if(osw!=null){try {osw.close();} catch (IOException e) {e.printStackTrace();}}}}

public static void test06(){StringReader reader = null;StringWriter writer = null;try {reader = new StringReader("我爱你中华 Ilove you !!!");writer = new StringWriter();char[] chaff = new char[2048];if(reader.read(chaff)!=-1){writer.write(chaff);}System.out.println("写入完毕");System.out.println(writer.toString());reader.close();writer.close();} catch (Exception e) {e.printStackTrace();} finally {if(reader!=null){reader.close();}if(writer!=null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}

总的来说学习IO类,就要学习,InputStream,OutputStream, Reader, Writer 这几个抽象类,以及继承他们的类

输入流和输出流都要注意创建一个有起始端和 终点端的连接


不积跬步,无以至千里

不积小流,无以成江海