文章目录
路径
根目录:
打开目录文件夹的第一层就是根目录。
eg:
我的项目online-examination-system
点击进入项目如图,该目录就是根目录,也就是说下图的所有文件夹|文件在根目录下。
绝对路径
从盘符开始,直接到达目标位置。
eg: D:\Code\JavaWeb\online-examination-system
注意:绝对路径用的分隔符为“ \ ”,相对路径用的分割符为“ / ”。
相对路径:
以引用文件所在的位置为参考基础,而建立出的目录路径;(html文件引用图像为例)
1.同一级路径:图像文件位于HTML文件同一级,直接写图像名;
< img src="photo.jpg" />
2.下一级路径:图像文件位于HTML文件下一级,用符号 / (下一级,多个下级就用多个符号)
< img src="aaa/photo.jpg" />
3.上一级路径:图像文件位于HTML文件上一级,用符号 …/ (上一级,多个上级就用多个符号)
< img src="../photo.jpg" />
网络中的路径:
联网情况下,可以调用任意网站的图片,要写上网站的绝对路径。
java程序中调用的路径:
访问Windows的路径:
String path="D:\\Code\\JavaWeb\\online-examination-system\\myfile.xlsx";
访问Linux的路径:
String path="//home//sdnmuser//app//microservice//myfile.xlsx";
SpringBoot中yml文件配置的路径:
访问Windows的路径:
import:
filePath: D:\Code\JavaWeb\online-examination-system\myfile.xlsx
访问Linux的路径:
import:
filePath: /home/sdnmuser/app/microservice/myfile.xlsx
File类
文件和目录路径名的抽象表示形式;
Java把电脑中的文件和文件夹(目录)封装为一个File类,可以使用File类对文件和文件夹进行操作;
注意:File类只能对文件或文件夹外部进行操作,不能对文件内部内容进行操作。
构造方法:
new File(String pathname)
new File(String parent,String child)
new File(File parent,String child);
路径可以以文件、文件夹、相对和绝对路径结尾;不考虑路径的真假;
方法:
1. String pathAbsolutePath() 返回此File的绝对路径名称;
2. String getPath() 将此File转换为路径名;
3. String getName() 返回File表示的文件或目录的名称;
4. long length() 返回此Filr表示的文件的长度; (文件夹没有大小概念)
5. boolean exists() 此File表示的文件或目录是否存在;
6. boolean isDirectory() 此File表示的是否为目录;
7. boolean isFile() 此File表示的是否为文件;
8. boolean createNewFile() 创建一个不存在的空文件;
9. boolean mkdir() 创建在此File表示的目录;
10. boolean mkdirs() 创建创建在此File表示的目录,多个;
11. boolean delete() 删除由此File表示的文件或目录;
12. String[] list() 该File目录中的所有子文件或目录;
13. File[] listFiles() 该File目录中的所有子文件或目录;
file:文件
directory:文件夹/目录
path:路径
静态字段:
String pathSeparator 与系统有关的路径分隔符
char pathSeparatorChar
String separator 与系统有关的默认名称分隔符
char separatorChar
注意:工作上对路径的操作时,路径不能写死;
一切文件数据在存储时,都是以二进制数字的形式保存以字节流可以传输任意文件数据;
OutputStream类
抽象类表示输出字节流的所有类的超类;
方法:
1.close() 关闭此输出流并释放此流相关联的任何系统资源;
2.flush() 刷新此输出流并强制任何缓冲的输出字节被写出;
3.write(byte[] b) 将b.length字节从指定的字节数组写入此输出流;
4.write(byte[] b,int off,int len) 从指定的字节数组写入len字节,从偏移量off开始输出到此输出流;
5.write(int b) 将指定的字节写入输出流;
FileOutputStream类 extends OutputStream类
文件字节输出流,把内存中的数据写入到硬盘的文件中。
构造方法:
1.FileOutputStream(String name)
2.FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流
3.FileOutputStream(File file, boolean append)
4.FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
append的作用:追加开关(true为开)。
构造方法的作用:
1.创建一个FileOutputStream对象;
2.会根据构造方法传递的文件/文件路径,创建一个空的文件;
3.会把FileOutputStream对象指向创建好的对象;
流程:
Java程序-->JVM-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件。
使用步骤:
1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地;
2.调用FileOutputStream对象中的write方法,将数据写入到文件中;
3.关闭资源;
输入内容:
换行:
windows: \r\n
Linux: /n
mac: /r
BufferedOutputStream类 extends OutputStream
字节缓冲输出流,继承字节输出流,构造方法传递FileOutputStream,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:
1.BufferedOutputStream(OutputStream out) 创建一个新的缓冲流对象,将数据写入指定的底层输出流;
2.BufferedOutputStream(OutputStream out,int size) 指定缓冲区大小;
InputStream类
字节输入流,抽象类表示字节输入流的所有类的超类。
方法:
1.close() 关闭此输入流并释放此流相关联的任何系统资源;
2.int read() 从输入流中读取数据的下一个字节;
3.int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中;
参数byte[]的作用:
1.缓存作用,存储每次读取的多个字节;
2.数组返回的长度定义为1024或倍数;
3.int返回值表示每次读到的有效字节数;
FileInputStream类 extends InputStream类
把硬盘文件中的数据读取到内存中使用。
构造方法:
1.FileInputStream(String name)
2.FileInputStream(File file)
参数:读取文件的数据源;
构造方法的作用:
1.创建一个FileInputStream对象;
2.把FileInputStream对象指定构造方法传递文件中读取文件;
使用步骤:
1.创建一个FileInputStream对象,构造方法中绑定要读取的数据源;
2.调用FileInputStream对象中的read方法,读取文件;(处理读取到的值)
3.关闭资源;
BufferedInputStream类 extends InputStream
字节缓冲输入流,继承字节输入流,构造方法传递FileInputStream,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:
1.BufferedInputStream(InputStream out) 创建一个新的缓冲流对象;
2.BufferedInputStream(InputStream out,int size) 指定缓冲区大小;
Reader类
字符输入流,是字符输入流的最顶层父类。
方法:
1.int read() 读取单个字符并返回;
2.int read(char[] cbuf) 一次读取多个字符,将字符写进数组里;
3.close() 关闭流并释放与之关联的所有资源;
FileReader类 extends InputStreamReader extends Reader类
文件字符输入流,把硬盘中的数据一字符的形式读到内存。
构造方法:
FileReader(String fileName)
FileReader(File file)
构造方法的作用:
1.创建一个FileReader对象;
2.将对向指向要读取的文件;
InputStreamReader类 extends Reader (拥有父类方法)
是字节流通向字符流的桥梁,可以指定charset读取字节并将其解码为字符(解码)
构造方法:
1.InputStreamReader(InputStream in) 创建使用默认字符编码的OutputStreamReader;
2.InputStreamReader(InputStream in,String charsetName) 创建使用指定字符集的InputStreamReader;
BufferedReader类 extnds Reader
字符缓冲输入流,继承字符输入流,构造方法传递FileReader,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:
1.BufferedReader(Reader r);
2.BufferedReader(Reader r,int size);
特有方法:
void readLine() 读取一个文本行;
读取一个文本行,读取一行数据,包含该行内容的字符串,不包含任何行终止符。
Writer类
字符输出流,所有字符输出流的最顶级的父类。
方法:
1.write(int c) 写入一个字符;
2.write(char[] cduf) 写入字符数组;
3.write(char[] cduf,int off,int len) 写入字符数组的一部分;
4.write(String str) 写入字符串;
5.write(String str,int off,int len) 写入字符串的一部分;
6.flush() 刷新该流的缓冲;
7.close() 关闭资源;
输入内容:
换行:
windows: \r\n
Linux: /n
mac: /r
FileWriter类 extends OutputStreamWriter extends Writer
文件字符输出流,把内存中字符数据写入到文件中。
处理异常:
1.try{}catch{}finally{}
2.try(定义流对象;定义流对象....){
可能产生异常的代码
}catch{
异常的处理逻辑
}
BufferedWriter类 extnds Writer
字符缓冲输出流,继承字符输出流,构造方法传递FileWritee,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:
1.BufferedWriter(Writer w);
2.BufferedWriter(Writer w,int size);
特有方法:
void newLine() 写入一个行分隔符;
OutputStreamWriter类 extends Writer (拥有父类方法)
是字符流通向字节流的桥梁,可以指定charset将要写入流中的字符编码成字节(编码:把看得懂的变为看不懂)。
构造方法:
1.OutputStreamWriter(OutputStream out) 创建使用默认字符编码的OutputStreamWriter;
2.OutputStreamWriter(OutputStream out,String charsetName) 创建使用指定字符集的OutputStreamWriter;
Properties<>集合 extends Hashtable<k,v> implements Map<k,v>
表示了一个持久层的属性集,可以保存在流中或从流中加载。
Properties集合是唯一和IO流相结合的集合;
使用store方法,把集合中的临时数据持久化写入到硬盘中存储;
使用load方法,把硬盘中保存的数据文件(键值对)读取到集合中使用;
属性列表中每个键及其对应的值都是字符串类型;
方法:
1.Object setProperty(String key,String value) 调用Hashtable的方法put;
2.String getProperty(String key) 通过key找到value值;
3.Set<String> stringPropertyNames() 返回此属性列表中的键集,相当于Map中的keySet方法;
4.store(OutputStream out,String comments)
5.store(Writer writer,String comments)
参数:
OutputStream :字节输出流,不能写入中文;
Writer:字符输入流,可以写中文;
comments:注释,不能使用中文,一般使用空字符串;
6.load(InputStream inStream)
7.load(Reader reader)
注意:
1.存储键值对的文件,键与值默认的连接符号可以使用=,空格;
2.用#注释;
3.默认String,不用加引号;
ObjectOutputStream类 extends OutputStream
对象的序列化流,把对象以流的方法写入到文件中保存。
构造方法:
ObjectOutputStream(OutputStream out) 创建写入指定OutputStream 的ObjectOutputStream;
特有方法:
void writeObject(Object obj) 将指定的对象写入到 ObjectOutputStream;
使用步骤:
1.创建ObjectOutputStream对象,方法中传递字节输出流;
2.使用ObjectOutputStream对象的方法writeObject,把对象写入到文件中;
3.释放资源;
要实例化的对象:
序列化和反序列化的时候,会抛出NotSeralizableException没有序列化异常;
类通过实现io.Serializable 接口以启动其序列化功能;
Serializable接口也叫标记接口,实现该接口后,会给该类添加一个标记;
static关键字和transient关键字:
static:静态关键字,优先于非静态加载到内存中,被static修饰的成员变量不能被序列化;
transient:瞬态关键字,被transient修饰的成员变量不能被序列化;
自定义序列标记号:
private static final login serialVersionUID = 1L;
防止在序列化后,类的class文件发生改变,在反序列化时产生异常InvalidClassException异常;
ObjectInputStream类 extends InputStream
对象的反序列化,把文件中保存到对象,以流的方式读取出来;
构造方法:
ObjectInputStream(InputStream in) 创建指定InputStream 的ObjectInputStream;
特有方法:
void readObject(Object obj) 从ObjectinputStream中读取对象;
反序列化的前提:
1.类必须实现Serializable接口
2.必须存在类对应的class文件