文件操作
1.1 文件操作类:File,以及常用方法
关于创建:
public boolean createNewFile() throws IOException
:创建新文件public boolean mkdir()
:创建当前对象所描述的文件夹的最后一级(如果其父级路径不存在,则创建失败)public boolean mkdirs()
:创建当前File对象所描述的文件夹(其父级路劲不存在,则自动创建),就是创建多级路径
关于删除:
public boolean delete()
:删除指定路径的文件或者文件夹;如果删除的是文件夹,则文件夹必须是空的。否则删除失败。
以上的方法都是针对创建对象时指定路径的最后一级操作,例:
File f = new File("D:" + File.separator + "IO流" + File.separator + "a" + File.separator + "b");
此处最后一级是b文件夹,所以只是操作b文件夹
其他方法
public String getName()
public int length()
public File getAbsoluteFile()
public String getPath()
2、输入流:InputStream
构造方法
FileInputStream(File f)
:将一个File对象所表示的文件封装到一个字节输入流中,未来都是以字节方式读取文件内容FileInputStream(String path)
:将一个字符串所表示的文件路径封装到一个字节输入流中,未来从文件中以字节的方式读取文件内容
读取文件的方法:
int read()
:从当前的直接输入流中,读取并返回一个字节,返回值结果int,表示读取到的字节对应的整数结构,如果返回-1表示证明文件读取完毕int read(byte[] arr)
: 读取数组大小个数的字节信息,存储到数组中,返回值结果为int,表示本次读取到的字节的个数,如果读取到-1,证明文件读取完毕void close()
:关闭该流对象
例:
public class Demo4 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(new File("D:\\IO流\\1.txt")); //获取文件流
// int read = fis.read(); //读取文件单个字节,返回值就为每次读取到的值的ASCII码值
//循环读取,全部读完返回-1
int i;
while ((i = fis.read()) != -1) {
System.out.print((char) i);
}
}
}
将读取结果存放到byte
数组:
public class Demo3 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(new File("D:\\IO流\\1.txt")); //获取文件流
byte[] bytes = new byte[9];
int read = fis.read(bytes);//读取数组大小个数的字节信息,存储到数组中,返回值结果为int,表示本次读取到的字节的个数
String str = new String(bytes);//转为字符串
System.out.println(read);
System.out.println(str);
//继续向后读
read = fis.read(bytes);
System.out.println(read);
System.out.println(new String(bytes,0,read));
fis.close();
}
}
3、输入、输出流 OutputStream
OutputStream
InputStream
4、高效字节缓冲流
BufferedOutputStream
①:write()
:写出到缓冲区中, 不会直接写到磁盘,除非关闭流对象,或者写够8192
②:flush()
:刷新,将写到缓冲区的写到磁盘。BufferedInputStream
5、字符流
Writer
Reader
6、字符高效缓冲流
BufferedReader
和BufferedWriter
,构造方法接收字符流。- 高效的原理:
(1) 输入流,每次调用read方法,一次从磁盘中读取8192个字符,存储到该类型对象的缓冲数组中,将其中一个返回给调用者,再次调用read方法 时候,就不需要再访问磁盘了,直接从缓冲区中拿出来一个即可
(2) 输出流:每次调用writer,不会直接将内容刷新到目标文件,会先放入缓冲数组中,等字符数组写满了,才会一次刷新到目标文件中,减少了磁盘交互的次数,提升了效率 - 特有方法:
(1)BufferedReader
:readLine()
; 可以从输入流中一次读取一行数据,返回一个字符串,如果到达文件末尾,则返回null
(2)BufferedWriter
:newLine()
; 换行,在不同的操作系统中,换行符各不相同,newLine方法就是根据不同的系统,提供不同的换行符
7、转换流
OutputStreamWriter(OutputStream os,String charsetName)
:InputStreamReader(InputStream is, String charsetName)
:
8、字节数组流
ByteArrayOutputStream
和ByteArrayInputStream
9、标准输入输出流
-
System.in
:标准的输入流,返回值类型InputStream(字节流)
(1) 分类:字节输入流
(2) 设备:默认关联至键盘
(3) 对标准输入流关联的路径进行修改:setIn(InputStream is),来自于System类中,可以改变标准输入流对象的数据来源
(4) 该对象不需要关闭 -
System.out
:标准的输出流,返回值类型PrintStream(打印流)
(1) 分类:打印字节流
(2) 设备:默认关联至控制台
(3) 对标准的输出流关联的路径进行修改:setOut(PrintStream ps)
-
注意:
System.in
主要使用在默认到键盘的录入场景上,System.out
是默认关联到控制台进行输出,主要关注的就是PrintStream
中print
和println
系列方法功能,将任意的数据转换成字符串进行输出,默认在控制台
10、对象输入输出流
ObjectOutputStream
:对象输出流,是ObjectStream的子类
(1)ObjectOutputStream(OutputStrean o)
:需要绑定一个写出的地方,比如:向文件中写入对象ObjectInputStream
:对象输入流,将用对象输出流输出的对象读取到内存中。
11、properties配置文件的读写
load(InputStream in)
: 通过load方法,将InputStream字节流读取到的配置文件信息放置到Properties的键值对集合中load(Reader read)
:通过load方法,将字符流读取到的配置文件信息,放入到集合中。store(OutputStream out,String comments)
:使用字节输出流,修改配置文件中的内容,comments是对于本次修改的描述sotre(Writer w,String comments)
:使用字符的输入流,修改配置文件中的内容,comments就是修改的描述list(PrintStream out)
:将文件内容全部输出到制定打印流,可以打印到控制台。