* IO流分类:
* 字节流
* 字节输出流:OutputStream
* 字节输入流:InputStream
*
* 字符流
* 字符输出流:Writer
* 字符输入流:Reader
*
* 流向:
* 输入流
* 输出流
FileOutputStream(字节输出流)
FileOutputStream是OutputStream子类。
OutputStream是抽象类无法创建对象所以使用子类。
字节数出流使用步骤:
1.创建字节输出流对象
2.写数据
3.关流
构造方法:
* FileOutputStream(String name):参数name:写入的文件路径
写数据的方法:
* void write(int b):写一个字节
* void write(byte[] b):写一个字节数组
* void write(byte[] b, int off, int len):写字节数组的一部分
*
* 注意:如果文件路径不以盘符开始,默认在当前项目下。
* 如何换行?
* Windows: \r\n
* Linux:\n
* Mac:\r
*
*
* 如何实现数据的追加写入?
* public FileOutputStream(String name,boolean append):第二参数为true表示追加
FileInputStream(字节输入流)(掌握)
* FileInputStream(字节输入流):
* FileInputStream(String name)
*
* 读取的方法:
* int read():每次读取一个字节
* int read(byte[] b):每次读取一个字节数组
读取的方式:一次读取一个字节
FileInputStream fis = new FileInputStream("a.txt");
int by;
while( (by = fis.read()) != -1){
System.out.print((char)by);
}
注意:英文字母每一个占用1字节空间,中文占用空间2字节,那么每次读取一个字节,如果文件中有中文会乱码。
读取方式:一次读取一个数组:
byte[] bys = new byte[1024];
int len;//读取到的长度
while( (len = fis.read(bys)) != -1 ){
System.out.print( new String(bys, 0, len) );
}
高效流
高效的字节输入流
* BufferedInputStream(InputStream in)
*
*高效的字节输出流
* BufferedOutputStream(OutputStream in)
File
File:文件和目录路径名的抽象表示形式。
* File类的构造方法:
* File(String pathname):根据一个路径得到File对象
* File(String parent, String child):根据父级目录+子级目录得到file对象
* File(File parent, String child):根据file对象+子级目录
?
创建功能:
* boolean createNewFile():创建文件
* boolean mkdir():创建的是单级文件夹
* boolean mkdirs():创建多级文件夹
* 注意:以上三个方法创建成功返回true,如果存在返回false。
删除功能:
boolean delete():可以删除文件和文件夹
* 注意:
* 1.删除某一个目录,该目录下如果有内容,那么无法删除
* 2.java删除不走回收站
重命名功能:
boolean renameTo(File dest):重命名
* 注意:
* 如果路径不变,改名。
* 如果路径不同,剪切并改名。
判断功能:
* boolean exists():是否存在
* boolean isAbsolute():是否是绝对路径
* boolean isDirectory():是否是目录
* boolean isFile():是否是文件
简单获取功能:
* String getAbsolutePath():获取绝对路径
* String getName():获取文件或者目录的名称
* long length():获取这个文件中的长度
高级获取功能:
String[] list():获取目录下所有的文件及文件夹的名称存放在String数组中
File[] listFiles():获取目录下所有的文件及文件夹的对象存储在File数组中
字符输出流FileWriter
Writer是字符输出流的父类,但是是抽象类无法创建对象,所以学下了下面的子类FileWrite。
FileWriter类的构造方法:
* FileWriter(String fileName)
*
* 写入的方法:
* void write(int c):写入单个字符。
* 'a' 97 == 'a'
* void write(char[] cbuf):写入字符数组。
* void write(char[] cbuf, int off, int len): 写入字符数组的某一部分。
* void write(String str):写入字符串。
* void write(String str, int off, int len):写入字符串的某一部分。
字符输入流FileReader
FileReader中的构造方法:
* FileReader(String fileName)
*
读取方法:
* int read():读取单个字符。
* int read(char[] cbuf):将字符读入数组
一次读写一个字符:代码
int ch;
while( (ch = fr.read()) != -1 ){
fw.write(ch);
}
一次读写一个字符数组:代码
char[] chs = new char[1024];
int len;
while( (len = fr.read(chs)) != -1 ){
fw.write(chs, 0 , len);
}
Buffered(Writer和Reader)
* BufferedWriter的构造方法:
* BufferedWriter(Writer out)
BufferedWriter中的方法
* void newLine():写入一个换行符
*
* BufferedReader的构造方法:
* BufferedReader(Reader in)
BufferedReader中的方法
* String readLine():每次读取一行
转换流
* OutputStreamWriter:
* OutputStreamWriter(OutputStream out):默认编码
* OutputStreamWriter(OutputStream out, String charsetName):指定编码
*
* InputStreamReader:
* InputStreamReader(inputStream in):默认编码
* InputStreamReader(inputStream in,String charsetName):指定编码