IO

第一天-File

01-IO技术概述
IO是相对于内存的。
Output
* 把内存中的数据存储到持久化设备上这个动作称为输出(写) Output 操作
Input
* 把持久设备上的数据读取到内存中的这个动作称为输入(读) Input 操作
IO 操作
* 把上面的这种输入和输出动作称为 IO 操作

02-File类的概述和作用
File 类是文件和目录路径名的抽象表示形式
Java 中把文件或者目录(文件夹)都封装成 File 对象
我们要去操作硬盘上的文件,或者文件夹只要找到 File 这个类即可

03-File类静态的成员变量
* a: pathSeparator
* 与系统有关的路径分隔符,为了方便,它被表示为一个字符串----; 就是分号
* b: separator
* 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串---\ 就是反斜杠

04-File类构造方法_1
File(String pathname)
代码:
File file = new File("d:\\eclipse");

06-File类的构造方法_2
* a:File(String parent, String child)
* 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象
File file = new File("d:","eclipse");
* b: File(File parent, String child)
File parent = new File("d:");
File file = new File(parent,"eclipse");

07-File类创建文件功能
* a: public boolean createNewFile()
* 创建文件 如果存在这样的文件,就不创建了

File file = new File("c:\\a.txt");
boolean b = file.createNewFile();

08-File类创建目录功能
* a: 创建目录
* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

File file = new File("c:\\abc");
boolean b = file.mkdirs();

09-File类删除功能
a: 删除功能
* public boolean delete():删除文件或者文件夹

File file = new File("c:\\a.txt");
boolean b = file.delete();

10-File类获取功能
* a: 方法介绍
* String getName(): 返回路径中表示的文件或者文件夹名
* 获取路径中的最后部分的名字
File file = new File("D:\\app\\Java\\jdk1.7.0_72\\src.zip");
String name = file.getName();
System.out.println(name);---输出---src.zip
* long length(): 返回路径中表示的文件的字节数
File file = new File("D:\\app\\Java\\jdk1.7.0_72\\src.zip");
long length = file.length();
System.out.println(length);---输出---20782681
* String getAbsolutePath(): 获取绝对路径,返回String对象
* File getAbsoluteFile() : 获取绝对路径,返回File对象
* eclipse环境中,写一个相对路径,绝对位置工程根目录
* String getParent(): 获取父路径,返回String对象
* File getParentFile(): 获取父路径,返回File对象
File file = new File("D:\\app\\Java");
File parent = file.getParentFile();
System.out.println(parent);---输出---D:\app

11-File类判断功能
* a: 方法介绍
* boolean exists(): 判断File构造方法中封装路径是否存在
* 存在返回true,不存在返回false
* boolean isDirectory(): 判断File构造方法中封装的路径是不是文件夹
* 如果是文件夹,返回true,不是文件返回false
* boolean isFile(): 判断File构造方法中封装的路径是不是文件
* 如果是文件,返回true,不是文件返回false

12-File类list获取功能
* a: 方法介绍
* String[] list():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
* 返回只有名字
File file = new File("D:\\app\\Java\\jdk1.7.0_72");
String[] list = file.list();

for (String name : list) {
System.out.println(name);
}
输出:
bin
COPYRIGHT
db
include
jre
lib
LICENSE
README.html
release
src.zip
THIRDPARTYLICENSEREADME-JAVAFX.txt
THIRDPARTYLICENSEREADME.txt
* File[] listFiles():获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
* 返回的是目录或者文件的全路径
File file = new File("D:\\app\\Java\\jdk1.7.0_72");
File[] list = file.listFiles();

for (File name : list) {
System.out.println(name);
}
输出:
D:\app\Java\jdk1.7.0_72\bin
D:\app\Java\jdk1.7.0_72\COPYRIGHT
D:\app\Java\jdk1.7.0_72\db
D:\app\Java\jdk1.7.0_72\include
D:\app\Java\jdk1.7.0_72\jre
D:\app\Java\jdk1.7.0_72\lib
D:\app\Java\jdk1.7.0_72\LICENSE
D:\app\Java\jdk1.7.0_72\README.html
D:\app\Java\jdk1.7.0_72\release
D:\app\Java\jdk1.7.0_72\src.zip
D:\app\Java\jdk1.7.0_72\THIRDPARTYLICENSEREADME-JAVAFX.txt
D:\app\Java\jdk1.7.0_72\THIRDPARTYLICENSEREADME.txt
* static File[] listRoots(): 列出可用的文件系统根
File file = new File("D:\\app\\Java\\jdk1.7.0_72");
File[] list = file.listRoots();

for (File name : list) {
System.out.println(name);
}
输出:
C:\
D:\
E:\
F:\

13-文件过滤器
1.实现文件过滤器,并重写accept()方法。
2.在测试代码中使用过滤器


第二天-IO流

1.字节流

1.1.字节输出流 OutputStream
输出流中定义都是写write 方法,如下图

FileOutputStream
OutputStream 有很多子类,其中子类FileOutputStream 可用来写入数据到文件。
FileOutputStream 类,即文件输出流,是用于将数据写入 File 的输出流。

1.1.1.FileOutputStream类写入数据到文件中
案例:
// 需求:将数据写入到文件中。
        // 创建存储数据的文件。
        File file = new File( "c:\\file.txt");
        // 创建一个用于操作文件的字节输出流对象。一创建就必须明确数据存储目的地。
        // 输出流目的是文件,会自动创建。如果文件存在,则覆盖。
        FileOutputStream fos = new FileOutputStream(file);
        // 调用父类中的 write 方法。
        byte[] data = "abcde".getBytes();
        fos.write(data);
        // 关闭流资源。
        fos.close();

1.1.3.给文件中续写和换行
FileOutputStream fos = new FileOutputStream(file, true);
String str = "\r\n"+"itcast";
fos.write(str.getBytes());

字节输入流 InputStream
把内存中的数据读到内存中。InputStream 此抽象类,是表示字节输入流的所有类的超类。,定义了字节输入流的基本共性功能方法。

int read():读取一个字节并返回,没有字节返回-1.
int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

FileInputStream
InputStream 有很多子类,其中子类FileInputStream 可用来读取文件内容。
FileInputStream 从文件系统中的某个文件中获得输入字节。

构造方法

2.字符流

2.3 字符输入流Reader

read():读取单个字符并返回
read(char[]):将数据读取到数组中,并返回读取的个数。

2.3.1 FileReader
用法和FileInputStream类似

2.4 字符输出流Writer


2.5 flush()和close()的区别?

flush(): 将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
close(): 关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close 完成刷新并关闭。

为什么要字符流?
用来操作文件的字符输入流(简便的流)

第三天-IO流

转换流
在字节流的基础上,构造一个InputStreamReader 或者OutputStreamWriter
OutputStreamWriter
OutputStreamWriter 字符流通向字节流 的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,再使用字节流将这些字节写出去。
        // 创建与文件关联的字节输出流对象
        FileOutputStream fos = new FileOutputStream( "c:\\cn8.txt");
        // 创建可以把字符转成字节的转换流对象,并指定编码
        OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
        // 调用转换流,把文字写出去,其实是写到转换流的缓冲区中
        osw.write( " 你好 "); // 写入缓冲区。
        osw.close();
InputStreamReader
InputStreamReader 字节流通向字符流 的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
// 创建读取文件的字节流对象
        InputStream in = new FileInputStream( "c:\\cn8.txt");
        // 创建转换流对象
        InputStreamReader isr = new InputStreamReader(in, "utf-8");
        // 使用转换流去读字节流中的字节
        int ch = 0;
        while((ch = isr.read())!=-1){
            System. out.println(( char)ch);
        }
        // 关闭流
        isr.close()

缓冲流
在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办?
Java 中提高了一套缓冲流,它的存在,可提高IO 流的读写速度
缓冲流,根据流的分类分类字节缓冲流与字符缓冲流。

字节缓冲流

字节缓冲输出流BufferedOutputStream
FileOutputStream fos = new FileOutputStream("d:\\a.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("阿斯蒂芬hello world".getBytes());
bos.close();
字节缓冲输入流 BufferedInputStream
//1,创建缓冲流对象
FileInputStream fis = new FileInputStream("d:\\a.txt");
//把基本的流包装成高效的流
BufferedInputStream bis = new BufferedInputStream(fis);
int len = 0;
byte[] buf = new byte[1024];
while ((len = bis.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
bis.close();
字符缓冲输出流BufferedWriter
// 创建流基本字符输出流
FileWriter fw = new FileWriter("d:\\file.txt");
// 把基本的流进行包装
BufferedWriter bw = new BufferedWriter(fw);

for (int i = 0; i < 5; i++) {
bw.write("hello world");
bw.newLine();//换行
}
bw.close();
字符缓冲输入流BufferedReader




流的操作规律

第四天-IO流
Properties类
Properties 集合,它是唯一一个能与IO 流交互的集合
序列化与反序列化
用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
ObjectOutputStream
ObjectInputStream
打印流
commons-IO


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值