File类:(代表文件或者文件夹)
定义变量,数组,对象等方式都是将数据存储到内存之中的,断电是无法保存的
文件是存储在硬盘里面的,程序终止也不会丢失
File:只能对文件本身进行操作,不能读写文件里面存储的数据
创建的三种方法:
1.
File file = new File("D:\\new\\a.txt");
用反斜杠的原因是防止产生\n的情况。
2.
File file = new File("D:/new/a.txt");
- File会调用运行的系统上的方式
File file = new File("D:"+File.separator+"new"+File.separator+"a.txt");
常用的API:
System.out.println(file.exists());
//获得该文件是否存在
System.out.println(file.length());
//查看文件里面的大小
System.out.println(file.isDirectory());
//查看是否为文件夹
System.out.println(file.getName());
//查看该对象指向的文件的名字
System.out.println(file.lastModified());
//查看最后修改的时间
System.out.println(file.getPath());
//查看创建的时候的路径是什么
System.out.println(file.getAbsoluteFile());
//查看绝对路径
创建文件
System.out.println(file.createNewFile());
//创建文件
System.out.println(file.mkdirs());
//创建文件,只有一级
System.out.println(file.mkdirs());
//创建文件,多级的
System.out.println(file.delete());
//删除文件/文件夹,只能删除文件或空的文件夹
list()会获得字符串
listFiles()会获得文件对象
查询名字相同的文件
public static void search(File file,String name)
{
if(file == null||!file.exists()||file.isFile()){
return;
}
File[] files = file.listFiles();
if(files.length>0&&files!=null){
for(File fil :files){
if(fil.isFile()){
if(fil.getName().contains(name)){
System.out.println(fil.getAbsoluteFile());
}
else{
search(fil,name);
}
}
}
}
}
IO的使用需要在最后面关闭,否则会浪费资源
字节流的优点:文本的复制
缺点:读取中文文本容易出现乱码的问题。
读取性能差的问题:程序在内存中,而数据存储在硬盘中,每次调用都要用到硬件资源。
获得输入流:不断地将数据读入
InputStream is = new FileInputStream("D:\\test\\a.txt");
int b;
while ( (b=is.read())!=-1){
System.out.println(b);
}
一次读入多个字节
byte [] use = new byte[3];
int i ;
while ((i=is.read(use))!=-1)
{
s = new String(use);
System.out.println(s);
}
解决中文汉字乱码的问题方法:
1.定义一个数组直接接受文档里面的所有的内容
2.调用下面的方法,如果内容过大可能会溢出
byte[]bytes = is.readAllBytes();
System.out.println(new String(bytes));
获得输出流:
构造的时候可以不添加true,就会将内容覆盖点,加了true就会是添加的模式
OutputStream outputStream = new FileOutputStream("D:\\test\\a.txt",true);
outputStream.write('a');
outputStream.close();
想使用换行用\r\n转换为字符数组来进行换行
文件复制
字符输出流的优化:在没有进行资源的刷新或者关闭的时候,会将写的数据存放到内存里面缓冲区,如果缓冲区已经装满了会自动刷新