java学习三
什么是IO流?
-
I/O,即输入(input)输出(output),IO流指的是数据像连绵的流体一样进行传输
-
作用是 在本地磁盘和网络上操作数据
IO流的分类
-
按数据流向分
- 输入流:读取数据
- 输出流:写数据
- 按操作方式分
- 字节流:InputStream: 按字节的方式读取
- • OutPutStream:按字节的方式写数据
- 字符流:Reader:按字符的方式读取
- • Writer:按字符的方式写数据
IO流体系
-
字符流:按字符读写数据的IO流
-
Reader抽象类
-
FileReader
-
BuffereReader
-
Writer抽象类
-
FileWriter
-
BuffereWriter
-
字节流:按字节读写数据的IO流
-
InputStream抽象类
-
FileInputStream
-
BuffereInputStream
-
OutStream抽象类
-
FileOutStream
-
BuffereOutputStream
-
File类
成员方法
System.out.println("------------------------------");
//获取绝对路径
System.out.println(file.getAbsolutePath());
System.out.println("------------------------------");
//获取相对路径 相对于当前项目路径来讲
System.out.println(file.getPath());
System.out.println("------------------------------");
//获取文件名称
System.out.println(file.getName());
//获取指定文件夹里的所有的文件
File file5 = new File("lib");
String[] list = file5.list();
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
System.out.println("------------------------------");
File file6 = new File("lib");
File[] files = file6.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
public static void main(String[] args) throws IOException {
File file = new File("lib/a.txt");
//判断是否是文件
System.out.println(file.isFile());
System.out.println("------------------------------");
//判断是否是文件夹
System.out.println(file.isDirectory());
System.out.println("------------------------------");
//创建文件
File file1 = new File("lib/b.txt");
file1.createNewFile();
System.out.println("------------------------------");
//创建单个目录
File file2 = new File("lib/b");
file2.mkdir();
//创建单级个目录
File file3 = new File("lib/b/a");
file3.mkdirs();
System.out.println("------------------------------");
//判断文件是否存在
System.out.println(file3.exists());
}
字符流读数据一次读一次
public static void main(String[] args) throws IOException {
//创建字符输入流
Reader reader = new FileReader("lib/a.txt");
//读取数据
int len ;
// (len = reader.read())!= -1
// 1.执行 reader.read()
// 2.读取的值赋值给len
// 3.将len和-1 进行比较 如果是-1 跳出循环
while ((len = reader.read())!= -1){
System.out.print(len+" ");
}
//释放流
reader.close();
}
字符流读数据已数组读取
public static void main(String[] args) throws IOException {
//创建字符输入流
Reader reader = new FileReader("lib/a.txt");
//读取数据
int len ;
char[] chars = new char[3];
while ((len = reader.read(chars))!= -1){
String s = new String(chars,0,len);
System.out.print(s+" ");
}
//释放流
reader.close();
}
字符流写入数据
public static void main(String[] args) throws IOException {
//创建字符输入流
Writer writer = new FileWriter("lib/b.txt");
//写入数据
char[] chars= {'w','b','b','b','b','b','b','b'};
writer.write(chars,0,3);
writer.write('2');
writer.write("haohaoxuexi");
//释放流
writer.close();
}
字符流复制数据到指定文件
public static void main(String[] args) throws IOException {
// io流复制步骤
// 1.创建字符输入流文件
FileReader fr= new FileReader("lib/a.txt");
// 2.创建字符输出流文件
FileWriter wr = new FileWriter("lib/b.txt");
// 3.定义变量,记录读取的数据
int len;
// 4.循环读取数据 并将数据赋值给变量
// 5.将读取的数据写到输出文件中
while ((len=fr.read())!=-1){
wr.write(len);
}
// 6.释放资源 秀开后闭
fr.close();
wr.close();
}
public static void main(String[] args) throws IOException {
// io流复制步骤
// 1.创建字符输入流文件
FileReader fr= new FileReader("lib/a.txt");
// 2.创建字符输出流文件
FileWriter wr = new FileWriter("lib/b.txt");
// 3.定义变量,记录读取的数据
int len;
char[] chars = new char[1024];
// 4.循环读取数据 并将数据赋值给变量
// 5.将读取的数据写到输出文件中
while ((len=fr.read(chars))!=-1){
wr.write(chars,0,len);
}
// 6.释放资源
fr.close();
wr.close();
}
字符缓冲流标准写法
public static void main(String[] args) throws IOException {
// io流复制步骤
// 1.创建字符输入流文件
FileReader fr= new FileReader("lib/a.txt");
BufferedReader bufferedReader = new BufferedReader(fr);
// 2.创建字符输出流文件
FileWriter wr = new FileWriter("lib/b.txt");
BufferedWriter bufferedWriter = new BufferedWriter(wr);
// 3.定义变量,记录读取的数据
int len;
// 4.循环读取数据 并将数据赋值给变量
// 5.将读取的数据写到输出文件中
while ((len=bufferedReader.read())!=-1){
bufferedWriter.write(len);
// 这里记着换行 不同的系统有不同换行符
bufferedWriter.newLine();//这里是java根据不同的系统进行换行
}
// 6.释放资源
bufferedWriter.close();
bufferedWriter.close();
}
字符流只能拷贝纯文本文件,不能拷贝其他文件 如:jpg
字节流拷贝文件(拷贝png/jpg)
public static void main(String[] args) throws IOException {
// io流复制步骤
// 1.创建字节输入流文件
FileInputStream inputStream = new FileInputStream("lib/b/a/bn.png");
BufferedInputStream bufferedReader = new BufferedInputStream(inputStream);
// 2.创建字节输出流文件
FileOutputStream fo = new FileOutputStream("lib/b/a/b.png");
BufferedOutputStream bufferedWriter = new BufferedOutputStream(fo);
// 3.定义变量,记录读取的数据
int len;
// 4.循环读取数据 并将数据赋值给变量
// 5.将读取的数据写到输出文件中
while ((len=bufferedReader.read())!=-1){
bufferedWriter.write(len);
}
// 6.释放资源
bufferedWriter.close();
bufferedWriter.close();
}
public static void main(String[] args) throws IOException {
// io流复制步骤
// 1.创建字符输入流文件
FileInputStream inputStream = new FileInputStream("lib/b/a/bn.png");
BufferedInputStream bufferedReader = new BufferedInputStream(inputStream);
// 2.创建字符输出流文件
FileOutputStream fo = new FileOutputStream("lib/b/a/b.png");
BufferedOutputStream bufferedWriter = new BufferedOutputStream(fo);
// 3.定义变量,记录读取的数据
// int len;
// byte[] chars = new byte[1024];
// 4.循环读取数据 并将数据赋值给变量
// 5.将读取的数据写到输出文件中
// while ((len=inputStream.read(chars))!=-1){
// fo.write(chars,0,len);
// }
while ((len=bufferedReader.read())!=-1){
bufferedWriter.write(len);
}
// 6.释放资源
bufferedWriter.close();
bufferedWriter.close();
}