IO流

IO流体系(学习构造方法就行)

InputStream         
    |-FileInputStream
    |-DataInputStream
    |-ObjectInputStream
    |-ByteArrayInputStream
OutputStream    很少用
    |-FileOuterStream
    |-DataOuterStream
    |-ObjectOuterStream
    |-ByteArrayOuterStream
Reader
    |-FileReader
    |-InputStreamReader
    |-BufferedReader
Writer
    |-FileWriter
    |-InputStreamWriter
    |-BufferedWriter
    |-PrintWriter

IO流方法

1.close();所有的流都有IO异常,所有的流都必须关闭,防泄漏,close写在finally代码块里
2.read();每次读取一个字节
3.read(byte[]);每次读取一定长度的字节到byte[],返回读到字节的长度,没有读到返回-1;
4.read(byte[],int offset,int length);每次读取一定长度的字节到byte[]的offset开始的地方
5.write();跟read类似
6.flush();养成习惯,write之后写一句

File类

1.在Java中,File类用来表示文件或文件夹的具体类
2.File类有4个构造方法,其中3个用的比较多
    File file = new File(Sreing name);
3.常用方法:
    getName();获取文件/文件夹名
    getAbsolutePath();获取绝对路径
    getPath();获取相对于当前文件的路径,根本用不到
    exists();存不存在
    length();文件的长度,文件夹没有长度
    getParent();获取父目录,返回字符串
    lastModified();最后修改时间,long类型
    createNewFile();创建一个没有的文件,目录不存在无法创建
    getParentFile().mkdirs();创建多组目录文件夹
    renameTo();剪切文件、重命名文件
    delete();只能删除文件和空文件夹

文件递归获取

1.递归必须要有终止条件,否则会栈溢出
2.阶乘
3.九九乘法表
4.递归要用的3个方法
isFile();是否是一个文件
isDiretory();是否是一个文件夹
listFiles();返回当前文件夹下的所有文件和文件夹(只返回一层)
5.制作FileUtils工具类

文件读写操作

//throws Exception
FileInputStream fis = new FileInputStream(String filename);
int len = -1;
byte[] buf = new byte[1024];
//每次读1024个字节到字节数组里,不够1024空格填充
while((len = fis.read(b))!=-1){
    //read每调用一次,指针会自动跳过字节数组长度
    system.out.println(new String(buf,0,len));
}
fis.close();
File file = new File(String FileName);
if (!file.exists()) {
    file.getParentFile().mkdirs();
}
Scanner scanner = new Scanner(System.in);
/*
可以不创建,流在输出的时候自动创建文件,复制粘贴,粘贴不用创建文件
文件可以自动创建,但目录要自己手动创建
*/
OutputStream os = new FileOutputStream(file);
String input = scanner.next();
while (!input.equals("...")) {
    //字符串转字节数组
    os.write(input.getBytes());
    os.write("\r\n".getBytes());
    os.flush();
    input= scanner.next();
}
os.close();
//关闭之后才能重命名
//如果文件存在,重命名失败
System.out.println(file.renameTo(new File("C:/Users/superman/Desktop/test/8.txt")));
scanner.close();
}   

Java中基本数据类型的存储和读取(DataInputStream、DataOutputStream)

1.功能:提供对象序列化(持久化存储)的工具
2.写法:用FileInputStream和FileOutputStream来封装

对象的存储和读取(ObjectInputStream、ObjectOutputStream)

1.写法:用FileInputStream和FileOutputStream来封装
2.一个类需要存储,必须实现Serializable接口
3.序列化和反序列化需要用到同一个UID,随机分配就可以

ByteArrayInputStream、ByteArrayOutputStream

1.ByteArrayInputStream读的是字节数组
2.ByteArrayOutputStream与FileInputStream一起用,作为中转站,防止读取文件出现乱码
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(buf,o,len);
sysotem.out.println(baos.toString("GBK"));//可以
sysotem.out.println(baos.toString("GB2312"));//可以
sysotem.out.println(baos.toString("UTF-8"));//不可以

字符流(Reader、Writer)

1.写法跟InputStream一样,就是将byte[]改成char[]
2.字符流只能复制文本文件,字节流可以复制任意文件
3.复制文本首选字节流,字符流只是需要读取文本的时候

BufferedWriter(写法与FileWriter相似)、BufferedReader写法又有些不同

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//键盘录入,快速封装
String line = null;
while((line = bufr.readLine())!=null){
    system.out.println(line);
}
bufr.close();

转接流(InputStramReader、OutputStreamWriter(没讲))

1.网络中传递都是字节,一般用于读取网络文件(字节流→→→(InputStramReader)→→→字符流→→→(BufferedReader)→→→带缓冲区的字符流)
2.但如果读取文本文件,直接用FileWriter和FileReader就可以了

打印流(PrintWriter)

1.常用于写入文本文件

随机流(RandomAccessFile)

1.不属于IO流
2.seek(),writeUTF()
3.复制大文件工具类

防止读取文件乱码的三种方法

1.用FileReader文件读取
2.用InputStreamReader转接流读取
3.用ByteArrayInputStream用字节数组读取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值