I0流学习
文章目录
- File类的使用
- File 类的使用
- 常用构造器
- 路径分隔符
- 常用方法
- IO流原理及流的分类
- 流的分类
- 流的体系结构
- 节点流
- 缓冲流
- 转换流
File类的使用
File 类的使用
- file类的一个对象,代表一个文件或一个文件目录
- file类声明在java.io包下
- File类中涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法并未涉及到写入或读取文件内容的操作如果需要读取或写入文件内容,必须使用io流来完成
- 后续File类的对象长会作为参数传递到流的构造器,并指明读取或写入的"终点"
常用构造器
public File(String pathname)
- 以pathname为路径创建File对象,可以是绝对路径或者相对路径
public File(String parent,String child)
- 以parent为父路径,child为子路径创建File对象。
public File(File parent,String child)
- 根据一个父File对象和子文件路径创建File对象
路径分隔符
- 路径中的每级目录之间用一个路径分隔符隔开
- windows和DOS系统默认使用“\”来表示
- UNIX和URL使用“/”来表示
常用方法
- public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
File file=new File("F:\\Learn\\learn\\src");String[] list=file.list();for(String s:list){System.out.println(s);}
- public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
File[] file1=file.listFiles();for(File f:file1){System.out.println(f.getName());}
- public String getAbsolutePath():获取绝对路径
- public String getPath() :获取路径
- public String getName() :获取名称
- public String getParent():获取上层文件目录路径。若无,返回null
- public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
- public long lastModified() :获取最后一次的修改时间,毫秒值
- public boolean isDirectory():判断是否是文件目录
- public boolean isFile() :判断是否是文件
- public boolean exists() :判断是否存在
- public boolean canRead() :判断是否可读
- public boolean canWrite() :判断是否可写
- public boolean isHidden() :判断是否隐藏
IO流原理及流的分类
流的分类
- 操作数据单位:字节流,字符流
- 数据的流向:输入流,输出流
- 流的角色:节点流,处理流
流的体系结构
抽象基类 | 节点流 | 缓冲流 |
---|---|---|
InputStream | FileInputStream | BufferInputStream |
OutputStream | FileOutStream | BufferOutStream |
reader | FileReader | BufferReader |
Writer | FileWriter | BufferWirter |
节点流
- 读取文件
//1.建立一个流对象,将已存在的一个文件加载进流。FileReader fr = new FileReader(new File(“Test.txt”));
//2.创建一个临时存放数据的数组。char[] ch = new char[1024];
//3.调用流对象的读取方法将流中的数据读入到数组中。fr.read(ch);
//4. 关闭资源。fr.close();
- 写入文件
//1.创建流对象,建立数据存放文件FileWriter fw = new FileWriter(new File(“Test.txt”));
//2.调用流对象的写入方法,将数据写入流fw.write(“atguigu-songhongkang”);
//3.关闭流资源,并将流中的数据清空到文件中。fw.close();
- 注意
- 定义文件路径时,注意:可以用“/”或者“\”。
- 在写入一个文件时,如果使用构造器FileOutputStream(file),则目录下有同名文件将被覆盖。
- 在读取文件时,必须保证该文件已存在,否则报异常。
- 字节流操作字节,比如:.mp3,.avi,.rmvb,mp4,.jpg,.doc,.ppt
缓冲流
- 缓冲流:
- BufferedInputStream,
- BufferedOutputStream,
- BufferedReader,
- BufferedReader
- 作用:
- 提高流的读取,写入的书读
- 提高读写速度的原因:内部提供了一个缓冲区
public class BufferTest {/*实现非文本文件的复制*/@Testpublic void testBuffer(){FileInputStream fis= null;FileOutputStream fos= null;BufferedInputStream bis= null;BufferedOutputStream bos= null;try {//1.造文件File srcFile=new File("F:\\Learn\\learn\\R.jpg");File dstFile=new File("F:\\Learn\\learn\\R3.jpg");//2.1造节点流fis = new FileInputStream(srcFile);fos = new FileOutputStream(dstFile);//2.2造缓冲流bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//3.复制的细节:读取,写入byte[] buffer=new byte[5];int len;while((len=bis.read(buffer))!=-1){bos.write(buffer,0,len);}} catch (IOException e) {throw new RuntimeException(e);} finally {if(bis!=null){//4.资源关闭//要求:先关闭外层的流,在关闭内层的流try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}if(fos!=null){try {bis.close();} catch (IOException e) {throw new RuntimeException(e);}//说明:关闭外层流的同时,内层流也会同时的关闭,关于内层流的关闭,我们可以省略//fos.close();//fis.close();}}}
转换流
-
转换流
- InputStreamReader:将一个字节的输入流转换为字符的输入流
- OutPutStreamReader:将一个字符的输出流转换为字节的输出流
-
作用:提供字节流与字符流之间的转换
-
- 解码:字节,字节数组—>字符数组,字符串
- 编码:字符数组,字符串—>字节,字节数组
-
字符集
- ASCII:美国标准信息交换码。用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表用一个字节的8位表示。
GB2312:中国的中文编码表。最多两个字节编码所有字符
GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有文字都用两个字节来表示。
UTF-8:变长的编码方式,可用1-4个字节来表示一个字符
- ASCII:美国标准信息交换码。用一个字节的7位可以表示。