IO流的一些知识点

来源:互联网 发布:nba2k14中文版下载软件 编辑:程序博客网 时间:2024/06/06 02:56
/**
* IO的分类:
* 1:根据处理的数据类型不同分为:字节流,字符流
* 2:根据流向不同分为:输入流,输出流

* 字节流和字符流的区别:
* 1:字节流读取的时候,读取到一个字节就返回一个字节
*     字符流底层使用了字节流,读取到一个或多个字节先去查找自定的编码表,再将查到的字符返回
*
* 2:字节流可以处理所有的数据类型,字符流只能字符类型数据

* 字符流:

* reader
* ----inputStreamReader
* ----fileReader
*
* writer
* ----outPutStreamWriter

* reader中常见的api:
* 1:int read();
* 读取一个字符.如果流读到的是某位则返回-1
* 2:int read(char[])
* 将读取到的字符存入指定的数据中,末尾返回-1
* 3:close();
* 释放资源

* writer中常见api:
* 1:write(ch)将一个字符写入到流中
* 2:write(char[])将一个字符数组写入到流中
* 3:write(String str)将一个字符串写入到流中
* 4:flush()刷出流中数据
* 5:close()释放资源

*字符流的缓冲区:
*
* 缓冲区的出现提高了对流的操作效率
* 字符流缓冲区:BufferedWriter:
* 特有方法:newLine()跨平台的换行
*   readLine()一次读取一行,当读取到某尾返回null
* 构建缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数
* 例如:BufferedWriter writer = new BufferedWriter(new FileWriter("D://demo.txt"));


* 字节流:

* 抽象基类:
* InputStream,OutPutStream
*
* 注意:字符流使用的数组是字符数组char[]
* 字节流使用的数组是字节数组byte[]

*字节流的read()方法读取一个字节,为什么返回的不是byte类型,而是int类型
*
* 因为read()读取到某尾返回的是-1,在所操作中很容易出现多个1的情况,而如果连续读取到8个1那就是-1,就会导致文件读取终止
* 所有将读取到的一个字节提升为一个int类型的数值,但是只保留原字节,并在剩余二进制位补0


* 转换流:

* 1:字节流和字符流之间的桥梁
* 2:流对象中可以对读取到的字节数据进行指定编码表的转换

* 具体的对象:
* InPutStreamReader :字节流到字符流
* OutPutStreamWriter : 字符流到字节流

* 上述两个对象都有两个构造函数可以指定编码表或者不知道编码表直接使用本地编码进行初始化
*
*
*File类:
*
* 对文件系统中的文件以及文件夹进行封装的对象
*
*
*构造函数:
* File file = new File(pathname)
* File file = new File(File parent,String child);
* File file = new File(String parent,String child);

* 跨平台目录分隔符separator
* file.separator

*常见API:
* boolean mkdir():创建文件夹
* boolean mkdirs():创建多级文件夹
* boolean delete():删除文件夹或文件,对于文件夹只能删除空的文件夹
* boolean exists():判断文件夹是否存在
* boolean isfile():判断是否是文件
* getName(),getPath(),getParent(),list,listFiles等等

* 管道流,合并流


*/

public static void main(String[] args) throws Exception {
//1
// FileWriter fileWriter = new FileWriter("D://demo.txt");
// fileWriter.write("你好啊");
// fileWriter.flush();
//
// fileWriter.close();

//2
// FileReader fileReader = new FileReader("D://demo.txt");
//
// int ch = 0;
//
// while((ch=fileReader.read())!=-1){
// System.out.println(ch);
// }
//3
/*FileReader fileReader = new FileReader("D://demo.txt");
//定义一个数组
char[] buf = new char[1024];
int len = 0;

while((len=fileReader.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}*/

//4:缓冲区
/*BufferedWriter writer = new BufferedWriter(new FileWriter("D://demo.txt"));
writer.write("没我电话我好的圣诞节哦啊我jowajdadj我都是的事务所;");
writer.flush();
writer.close();

BufferedReader reader = new BufferedReader(new FileReader("D://demo.txt"));
String line = null;

while((line = reader.readLine())!=null){
System.out.println(line);
}

reader.close();*/

//5:通过缓冲区对文件进行拷贝

/*BufferedWriter writer = new BufferedWriter(new FileWriter("D://democopy.txt"));
BufferedReader reader = new BufferedReader(new FileReader("D://demo.txt"));

String line = null;

while((line = reader.readLine())!=null){
System.out.println(line);
writer.write(line);//写一行数据
writer.newLine();//换行
writer.flush();
}

writer.close();
reader.close();*/

//------------------------字节流---------------------
/*FileOutputStream fileOutputStream = new FileOutputStream("D://sss.txt");
fileOutputStream.write("wdsds中国人".getBytes());
fileOutputStream.close();

FileInputStream fileInputStream = new FileInputStream("D:\\sss.txt");
int available = fileInputStream.available();
System.out.println("文件的字节数:"+available);
//如果文本内容很小的情况下可以这样操作
//不然很容易引起内容溢出
byte[] buf = new byte[available];//创建一个和文本大小相同的数组
fileInputStream.read(buf);
System.out.println(new String(buf));*/
//2:字节流copy一个图片
BufferedInputStream bufs = new BufferedInputStream(new FileInputStream("D://nihao.png"));
BufferedOutputStream outs = new BufferedOutputStream(new FileOutputStream("D://copy.png"));

int bu = 0;

while((bu = bufs.read())!=-1){
outs.write(bu);
}
bufs.close();
outs.close();
}
原创粉丝点击