活动地址:CSDN21天学习挑战赛
🍁博客主页:
👉@不会压弯的小飞侠
✨欢迎关注:
👉点赞
👍收藏
⭐留言
✒
✨系列专栏:
👉21天挑战回顾java
✨知足上进,不负野心。
🔥欢迎大佬指正,一起学习!一起加油!
目录
- 一、File类
- 1.File类的构造方法
- 2.File类的创建
- 3.File类判断和获取
- 4.File类的删除
- 二、IO流
- 1.io流的概述和分类
- 2.字节流
- 1.字节流写数据
- 2.字节流写数据的三种方式
- 3.换行和追加
- 4.字节流读数据(一次只能读一个字节)
- 5.字节流复制文本文件
- 6.字节流读数据(一次读一个字节数组)(复制图片操作一样)
- 7.字节缓冲流
- 3.字符流
- 1.字符串中编码解码问题
- 2.字符流中编码解码问题
- 3.字符流写数据的5种方式
- 4.字符流读数据的2中方式
- 5.字符缓冲流
- 6.字符缓冲流特有功能
一、File类
1.File类的构造方法
方法名 | 说明 |
---|---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的File实例 |
案例分析:
package com.file;
import java.io.File;
public class Test1 {public static void main(String[] args) {File f1=new File("F://Test//java.txt");System.out.println(f1); //F:\Test\java.txtFile f2=new File("F://Test","java.txt");System.out.println(f2); //F:\Test\java.txtFile f3=new File("F://Test");File f4=new File(f3,"java.txt");System.out.println(f4); //F:\Test\java.txt}
}
2.File类的创建
方法名 | 说明 |
---|---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 |
public boolean mkdir() | 创建由此抽象路径名命名的目录 |
public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
案例分析:
package com.file;
import java.io.File;
import java.io.IOException;
public class Test2 {public static void main(String[] args) throws IOException {//在F盘的Test目录下创建一个test.txt文件File f1=new File("F://Test//test.txt");System.out.println(f1.createNewFile()); //true//在F盘的Test目录下创建一个Spring目录File f2=new File("F://Test//Spring");System.out.println(f2.mkdir()); //true//在F盘的Test目录下创建多个目录File f3=new File("F://Test//MyBatis//SpringMVC");System.out.println(f3.mkdirs()); //true}
}
3.File类判断和获取
方法名 | 说明 |
---|---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[]listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
案例分析:
package com.file;import java.io.File;public class Test3 {public static void main(String[] args) {File f=new File("F:\\Test\\java.txt");System.out.println(f.isDirectory()); //falseSystem.out.println(f.isFile()); //trueSystem.out.println(f.exists()); //trueSystem.out.println(f.getAbsoluteFile()); //F:\Test\java.txtSystem.out.println(f.getPath()); //F:\Test\java.txtSystem.out.println(f.getName()); //java.txtFile f1=new File("F:\\Test");String[] list = f1.list();for (String s : list) {System.out.println(s); /*
a
b
java.txt
MyBatis
Spring
test.txt
TestOne
小飞侠
小马哥*/}File[] files = f1.listFiles();for (File file : files) {System.out.println(file);
/*
F:\Test\a
F:\Test\b
F:\Test\java.txt
F:\Test\MyBatis
F:\Test\Spring
F:\Test\test.txt
F:\Test\TestOne
F:\Test\小飞侠
F:\Test\小马哥 */}}
}
4.File类的删除
方法名 | 说明 |
---|---|
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
- 绝对路径和相对路径的区别
- 绝对路径: 完整的路径名,不需要任何其他信息就可以定位它所表示的文件。
- 例如:
E:\\study\\text.txt
- 例如:
- 相对路径: 使用取自其他路径名的信息进行解释。
- 例:
study\\text.txt
- 例:
- 绝对路径: 完整的路径名,不需要任何其他信息就可以定位它所表示的文件。
案例分析:
package com.file;import java.io.File;
import java.io.IOException;public class Test4 {public static void main(String[] args) throws IOException {//在当前模块下创建one.txt文件File f1=new File("E:\\JavaSE\\Test\\File\\one.txt"); //trueSystem.out.println(f1.createNewFile());//删除当前模块下创建one.txt文件System.out.println(f1.delete()); true//在当前模块下创建one目录File f2=new File("E:\\JavaSE\\Test\\File\\one");System.out.println(f2.mkdir()); true//删除当前模块下创建one目录System.out.println(f2.delete()); true}
}
二、IO流
1.io流的概述和分类
-
IO:输入/输出(Input/Output)
- 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
-
IO流就是用来处理设备间数据传输问题的
- 常见的应用:文件复制;文件上传;文件下载
-
IO流分类:
- 按照数据的流向
- 输入流:读数据
- 输出流:写数据
- 按照数据的流向
-
按照数据类型来分
- 字节流
- 字节输入流;字节输出流
- 字符流
- 字符输入流;字符输出流
- 字节流
-
一般来说,IO流的分类是按照数据类型来分的
2.字节流
1.字节流写数据
- 字节流抽象基类
- lnputStream: 这个抽象类是表示字节输入流的所有类的超类
- OutputStream: 这个抽象类是表示字节输出流的所有类的超类
- 子类名特点: 子类名称都是以其父类名作为子类名的后缀
- FileOutputStream: 文件输出流用于将数据写入File
- FileOutputStream(Stringname): 创建文件输出流以指定的名称写入文件
案例分析:
package com.outPutstream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Test1 {public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream f = new FileOutputStream("E:\\JavaSE\\Test\\File\\outputStream.txt");//将字节写入此文件输出流f.write(97); //a//释放资源f.close();}
}
2.字节流写数据的三种方式
方法名 | 说明 |
---|---|
void write(int b) | 将指定的字节写入此文件输出流,一次写一个字节数据 |
void write(byte[] b) | 将b.length字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据 |
void write(byte[] b, int off, int len) | 将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据 |
案例分析:
package com.outPutstream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test2 {public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream f = new FileOutputStream("E:\\JavaSE\\Test\\File\\outputStream.txt");//将字节写入此文件输出流/* f.write(97);f.write(98);f.write(99);f.write(100); */ //abcd//将指定的字节数组写入此文件输出流byte[] bytes={97,98,99,100};//f.write(bytes); //abcdf.write(bytes,1,2); //bc//释放资源f.close();}
}
3.换行和追加
- 字节流写数据实现换行
- 写完数据后,加换行符
- windows:\n
- linux:\n
- mac:\r
- 字节流写数据实现追加写入
- public FileOutputStream(Stringname,boolean append)
- 创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头
案例分析:
package com.outPutstream;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class Test3 {public static void main(String[] args) throws IOException {FileOutputStream f = new FileOutputStream("E:\\JavaSE\\Test\\File\\outputStream.txt",true);for (int i = 0; i <5 ; i++) {f.write("hello".getBytes());f.write("\r\n".getBytes());}f.close();}
}
//执行三次的结果
/*
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello*/
4.字节流读数据(一次只能读一个字节)
- FilelnputStream:从文件系统中的文件获取输入字节
- FilelnputStream(String name):通过打开与实际文件的连接来创建一个FilelnputStream,该文件由文件系统中的路径名name命名
- 使用字节输入流读数据的步骤:
- 创建字节输入流对象
- 调用字节输入流对象的读数据方法
- 释放资源
案例分析:
package com.FileInputStream;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class Test1 {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream f = new FileInputStream("E:\\JavaSE\\Test\\File\\inputStream.txt");//读取数据/*int by = f.read();System.out.println(by); //97System.out.println((char)by); //a*///一次只能读取一个字节int by = f.read();while (by != -1){System.out.print((char) by); //abcby=f.read();}//释放资源f.close();}
}
5.字节流复制文本文件
案例:
package com.FileInputStream;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class Test2 {public static void main(String[] args) throws IOException {FileInputStream f1 = new FileInputStream("E:\\JavaSE\\Test\\File\\inputStream.txt");FileOutputStream f2 = new FileOutputStream("E:\\JavaSE\\Test\\File\\outputStream.txt");int by = f1.read();while (by !=-1){f2.write((char)by);by=f1.read();}}
}
6.字节流读数据(一次读一个字节数组)(复制图片操作一样)
案例:
package com.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Test3 {public static void main(String[] args) throws IOException {FileInputStream f1 = new FileInputStream("E:\\JavaSE\\Test\\File\\inputStream.txt");byte[] bytes=new byte[1024];int by;by = f1.read(bytes);while (by !=-1){System.out.println(new String(bytes,0,by));by=f1.read(bytes);}}
}
/*
Java
JavaWeb
Python
Spring
Mybatis*/
7.字节缓冲流
案例:
package com.BufferStream;import java.io.*;public class Test1 {public static void main(String[] args) throws IOException {BufferedOutputStream b1 = new BufferedOutputStream(new FileOutputStream("E:\\JavaSE\\Test\\File\\buffer.txt"));b1.write("Hello".getBytes());b1.write("\r\t".getBytes());b1.write("World".getBytes());b1.close();BufferedInputStream b2 = new BufferedInputStream(new FileInputStream("E:\\JavaSE\\Test\\File\\buffer.txt"));int by = b2.read();while (by !=-1){System.out.print((char)by);by=b2.read();}b2.close();}
}
3.字符流
1.字符串中编码解码问题
- 编码:
- bytegetBytes():使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
- bytel]getBytes(String charsetName):使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
- 解码
- String(byte[] bytes):通过使用平台的默认字符集解码指定的字节数组来构造新的String
- String(byte[] bytes, String charsetName):通过指定的字符集解码指定的字节数组来构造新的String
案例分析:
package com.zifu;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class Test1 {public static void main(String[] args) throws UnsupportedEncodingException {/*String s1="小马哥";byte[] bytes = s1.getBytes();System.out.println(Arrays.toString(bytes)); //[-27, -80, -113, -23, -87, -84, -27, -109, -91]//String s=new String(bytes); //小马哥String s=new String(bytes,"UTF-8"); //小马哥System.out.println(s);*/String s2="小飞侠";byte[] bytes =s2.getBytes("GBK");System.out.println(Arrays.toString(bytes)); //[-48, -95, -73, -55, -49, -64]String s=new String(bytes,"GBK");System.out.println(s); //小飞侠}
}
2.字符流中编码解码问题
- InputStreamReader:是从字节流到字符流的桥梁
- 它读取字节,并使用指定的编码将其解码为字符
- 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
- OutputStreamlriter:是从字符流到字节流的桥梁
- 是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节
- 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
案例分析:
package com.zifu;import java.io.*;public class Test2 {public static void main(String[] args) throws Exception {OutputStreamWriter o = new OutputStreamWriter(new FileOutputStream("E:\\JavaSE\\Test\\File\\java.txt"),"GBK");o.write("小飞侠");o.close();InputStreamReader i = new InputStreamReader(new FileInputStream("E:\\JavaSE\\Test\\File\\java.txt"),"GBK");int by = i.read();while (by !=-1){System.out.print((char)by); //小飞侠by=i.read();}}
}
3.字符流写数据的5种方式
方法名 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(char[]cbuf) | 写入一个字符数组 |
void write(char[]cbuf, int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
案例分析:
package com.zifu;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class Test3 {public static void main(String[] args) throws Exception {OutputStreamWriter o = new OutputStreamWriter(new FileOutputStream("E:\\JavaSE\\Test\\File\\java.txt"));//写一个字符o.write("97"); //97o.write("a"); //a//刷新流o.flush();//写一个字符数组char[] chars={'a','b','c','d','e'}; //abcde//o.write(chars);//写一个字符数组的一部分o.write(chars,0,chars.length); //abcdeo.write(chars,1,3); //bcd//写一个字符串//o.write("xyz"); //xyz//写一个字符串的一部分o.write("asdfghj",1,5); //sdfgho.close();}
}
4.字符流读数据的2中方式
方法名 | 说明 |
---|---|
int read() | 一次读一个字符数据 |
int read(char[] cbuf) | 一次读一个字符数组数据 |
案例分析:
package com.zifu;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;public class Test4 {public static void main(String[] args) throws IOException {InputStreamReader i = new InputStreamReader(new FileInputStream("E:\\JavaSE\\Test\\File\\java.txt"));//一次读一个字符数据int by = i.read();while (by !=-1){System.out.print((char)by); //aabcdebcdsdfghby=i.read();}//一次读一个字符数组char[] chars=new char[1024];int c = i.read(chars);while (c!=-1){System.out.println(new String(chars,0,c));c=i.read(chars);
/*
aab
cde
bcds
dfgh */}}
}
5.字符缓冲流
- 字符缓冲流:
- BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲 区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途
- BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。默认值足够大,可用于大多数用途
- 构造方法:
- BufferedWriter(Writer out)
- BufferedReader(Reader in)
案例分析:
package com.zifu;import java.io.*;public class Test5 {public static void main(String[] args) throws IOException {/*BufferedWriter w = new BufferedWriter(new FileWriter("E:\\JavaSE\\Test\\File\\java.txt"));w.write("Hello");w.write("\r\n");w.write("World");*/BufferedReader r = new BufferedReader(new FileReader("E:\\JavaSE\\Test\\File\\java.txt"));int by = r.read();while (by!=-1){System.out.print((char)by);
/*
Hello
World */by=r.read();}//w.close();r.close();}
}
6.字符缓冲流特有功能
- BufferedWriter:
- void newLine():写一行行分隔符,行分隔符字符串由系统属性定义
- BufferedReader:
- public String readLine():读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,如果流的结尾已经到达,则为null
案例分析:
package com.zifu;import java.io.*;public class Test6 {public static void main(String[] args) throws IOException {BufferedWriter w = new BufferedWriter(new FileWriter("E:\\JavaSE\\Test\\File\\java.txt"));for (int i = 0; i <5 ; i++) {w.write("Java"+i);
/*
Java0
Java1
Java2
Java3
Java4*///换行w.newLine();w.flush();}w.close();BufferedReader r = new BufferedReader(new FileReader("E:\\JavaSE\\Test\\File\\java.txt"));/*String s = r.readLine();while (s!=null){System.out.println(s);s=r.readLine();}*/String s;while ((s=r.readLine())!=null){System.out.println(s);}}
}
/*
Java0
Java1
Java2
Java3
Java4*/