//=================================================
1. IO流的概述
IO流用来处理设备之间的数据传输.
流按
操作数据
分为两种:
字节流与字符流
字符流:用于专门处理字符文件数据(文本文件,记事本可以打开观看到了)
操作字符的,计算机的存储中,两个字节,表示一个字符
汉字两个字节表示,因此使用字符流操作文本文件,方便简单
这个字符流使用的时候,默认的去查询本机默认编码表 GBK
字节流:每次做操作一个字节,8个二进制为
这个流对象,可以操作任意类型文件
计算机的远程操作过程中,用的都是字节流
不查询编码表
IO流技术,不能操作文件夹。
只能操作文件
//=================================================
2. IO流分类
按照流向分,输出流Output,输入流Input
向硬盘中写一个文件,输出流,文件数据目的
读取硬盘中的一个文件,输入流,文件数据源
按照操作文件类型分,字符流 -- 文本,字节流 -- 任意文件
字符流:
字符输出流:抽象基类:Writer -- 方法,写的方法 write
字符输入流: 抽象基类:Reader -- 方法,读的方法 read
字节流:
字节输出流:抽象基类:OutputStream -- 方法,写的方法 write
字节输入流:抽象基类:InputStream -- 方法,读的方法 read
//=================================================
3. 字符输出流对象
java.io.Wirter
类的方法,写的方法,方法都是重载形式
写,字符数组,字符数组一部分,单个字符,写字符串,字符串一部分
找到子类FileWriter 构造方法
FileWriter(String fileName) 传递一个文件名
字符流输出数据,写文件,必须刷新,否则数据不会走到目的地
但是只要你执行的刷新,数据必走向目的地
close()方法,关闭流对象,关闭之前,刷新内存中数据
/*
FileWriter字符输出流,写一个文本文件
*/
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建FileWriter的对象,传递字符串的文件名
/*
构造方法,抛出了IO异常
堆中创建一个对象
创建了一个文件,如果文件已经存在,直接覆盖
IO流对象本身,没有创建文件的功能,调用Windows中的功能创建的
*/
FileWriter fw = new FileWriter("c:\\demo.txt");
//开始写文件了,将abc写到文件中,write
fw.write("abc");//数据写在了内存中
//volid flush()刷新该流的缓冲,将内存中的数据,刷到目的中去
fw.flush();
fw.write("哈哈");
fw.flush();
//使用完IO流后,释放Windows资源,关闭流对象
fw.close();
}
}
//=============
/*
FileWriter类的写的其他方法
*/
import java.io.*;
class FileWriterDemo1
{
public static void main(String[] args) throws IOException
{
FileWriter fw = new FileWriter("e:\\other.txt");
//写一个字符数组
char[] ch = {'你','我','哈'};
fw.write(ch,0,ch.length);
fw.flush();
//写一个单个的字符
fw.write(65);
fw.flush();
fw.close();
}
}
//=================================================
4. 字符输入流对象
java.io.Reader
类的方法,读的方法,方法都是重载形式
读,读取单个字符,读取字符数组,读取字符数组一部分
找子类FileReader
构造方法FileReader(String fileName) 传递字符串的文件名
读取的方法
int read() 读取单个字符,返回int值
读取一个字符,返回ASCII码值,read()方法,执行一次,自动向后读一个
read()方法,读取到文件结尾返回-1
int read(char[] ch)读取方法的时候,传递一个字符数组
字符数组,缓冲区
数组,read()读取到的字符,装在数组中
int返回值,什么意思?读取到的有效的字符个数
数组缓冲,读取效率跟高,推荐使用数组缓冲读取文本文件
/*
* 使用字符输入流FileReader读取一个文件
* 必须是文本文件
*/
import java.io.*;
public class FileReaderDemo {
public static void main(String[] args) throws IOException{
long start = System.currentTimeMillis();
//创建一个字符输入流对象,传递文件名
FileReader fr = new FileReader("e:\\1.txt");
//调用读取的方法
//使用循环读取,read()结束返回-1,用-1作为循环条件进行读取了
int len = 0 ;
while( (len = fr.read())!=-1 ){
System.out.print((char)len);
}
fr.close();
long end = System.currentTimeMillis();
System.out.println(end - start );
}
}