第一天-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