Java IO流
IO流对象的继承关系
File类
-
两个常量(跨平台)
-
路径分隔符(;):File.pathSeparator
-
文件分隔符([win]或/[非win]):File.separator
-
-
java.io.File类:文件和目录路径名的抽象表示形式
-
通过File对象可以访问文件的属性,创建空文件或目录
-
user.dir:系统依据用户的工作路径来解释相对路径
-
常用方法之文件名
-
getName()文件名 路径名
-
getPath()路径名
-
getAbsoluteFile()绝对路径所对应的File对象
-
getAbsolutePath() 绝对路径名
-
getParent() 父目录 相对路径的父目录,可能为null,如删除本身后的结果
-
renameTo(File newName) 重命名
-
-
常用方法之判断信息
-
exists()
-
canWrite() 不存在的文件默认为文件夹
-
canRead()
-
isFile()
-
isDirectory()
-
isAbsolute()消除平台差异,win以盘符开头,其他以/开头
-
-
常用方法之长度
- length() 字节数,文件夹为0
-
常用方法之创建 删除
-
createNewFile() 不存在创建新文件,存在返回false
-
delete() 删除文件
-
static createTempFile(前缀3个字节长,后缀默认.temp)默认临时空间
-
static createTempFile(前缀3个字节长,后缀默认.temp,目录)
-
deleteOnExit() 退出虚拟机删除,常用于删除临时文件
-
-
常用方法之操作目录
-
mkdir()
-
mkdirs()
-
list() 文件或目录 字符串形式
-
listFiles()
-
static listRoots() 根路径
-
IO流分类
按数据
-
字节流:二进制 可以处理一切文件包括纯文本 doc 音频 视频等等
-
字符流:只能处理纯文本
按功能
-
节点流:离源头最近的
-
处理流:增强功能,提高性能
字符流与字节流
字节流
-
输入流:InputStream read(byte[] b),read(byte[] b,int off,int len),close()
- FileInputStream
-
输出流:OutputStream write(byte[] b),write(byte[] b,int off,int len),flush(),close()
- FileOutputStream
字符流
-
输入流:Reader read(char[] cbuf),read(char[] cbuf,int off,int len),close()
- FileReader
-
输出流:Writer write(char[] cbuf),write(char[] cbuf,int off,int len),flush(),close(),write(String str,int off,int len)
- FileWriter
操作
-
与文件建立联系
-
选择对应流
-
数组大小 读取(read或write)
-
释放资源
字节流读取文件与写出文件
读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Demo01 {
public static void main(String[] args) throws IOException {
//建立联系 File对象
File src = new File("F:/a.txt");
//选择流
InputStream is = new FileInputStream(src);
//操作不断读取 缓冲数组
byte[] car = new byte[1024];
int len = 0;
while(-1!=(len=is.read(car))){
//输出 字节数组转换成字符串
String string = new String(car);
System.out.println(string);
}
is.close();
}
}
输出
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo02 {
public static void main(String[] args) throws IOException {
//建立联系
File dest = new File("F:/a.txt");
//选择流
OutputStream os = new FileOutputStream(dest,true);//true为追加,false为覆盖,默认为false
String str = "Matrix42 is very good";
//字符串转为字节数组
byte[] data = str.getBytes();
os.write(data,0,data.length);
//强制刷新出去
os.flush();
os.close();
}
}
字符流读取文件与写出文件
读取
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Demo03 {
public static void main(String[] args) throws IOException {
File src = new File("F:/a.txt");
Reader reader = new FileReader(src);
char[] data = new char[10];
int len = 0;
while(-1!=(len=reader.read(data))){
String string = new String(data,0,len);
System.out.print(string);
}
reader.close();
}
}
输出
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo04 {
public static void main(String[] args) throws IOException {
File src = new File("F:/a.txt");
Writer writer = new FileWriter(src,true); //true追加
String string = "乱世用重典沉疴下猛药";
writer.write(string);
writer.flush();
writer.close();
}
}
处理流
-
节点流和处理流的关系
节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对其他流进行处理(提高效率或操作灵活性)
缓冲流
-
字节缓冲流
-
BufferedInputStream
-
BufferedOutputStream
-
没有新增方法使用时建议加上缓冲流
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Demo05 {
public static void main(String[] args) throws IOException {
//建立联系 File对象
File src = new File("F:/a.txt");
//选择流
InputStream is = new BufferedInputStream(new FileInputStream(src));
//操作不断读取 缓冲数组
byte[] car = new byte[1024];
int len = 0;
while(-1!=(len=is.read(car))){
//输出 字节数组转换成字符串
String string = new String(car);
}
}
}
-
字符缓冲流
-
BufferedReader readLine()
-
BufferedWriter newLine()
-
使用新增方法不能发生多态
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Demo06 {
public static void main(String[] args) throws IOException {
File src = new File("F:/a.txt");
BufferedReader reader = new BufferedReader(new FileReader(src));
String line = null;
while ((line=reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
}
}
转换流
字节流转为字符流,处理编码集 解码集
编码与解码的概念
编码:字符---编码字符集--->二进制
解码:二进制---解码字符集--->字符出现乱码的两种情况
编码与解码的字符集不统一
字节缺少,长度丢失
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 转换流:字节转为字符
* 1.输入流:OutputStreamWriter
* 2.输入流:InputStreamReader
* @author Matrix42
*
*/
public class Demo07 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(new File("F:/a.txt")),"UTF-8"));
String info = null;
while(null!=(info=br.readLine())){
System.out.println(info);
}
br.close();
}
}