1.File类
File封装的一个文件操作类,我们之前在window操作文件或文件夹都是通过图形化界面操作。我们可以通过File这个类完成对文件的操作。
想使用File必须创建File对象:File file=new File("路径");
1.1文件或文件夹的创建
1.创建文件
file.createNewFile()
2.创建文件夹
File file2=new File("D:/aaa2/bbb");
file2.mkdir();
3.创建多级文件夹
File file3=new File("D:/aaa2/b/c/d");
file3.mkdirs();
注:创建的是文件还是文件夹,跟调用的方法有关,和后缀无关。
1.2删除
1.删除文件
file.delete()
2.删除文件夹
file2.delete()
3.重命名/剪切
file1.renameTo(new File("D:/aaa2/ccc"));
file.renameTo(new File("D:/qy179.txt"));
4.文件设置只读
File file2=new File("D:/aaa2/b.txt");
file2.setReadOnly();
1.3查询和判断
获取文件相路径:String path = file.getPath();
获取文件的绝对路径:String absoluteFile = file.getAbsolutePath();(常用)
或String canonicalPath = file.getCanonicalPath();
1.获取指定目录下的子文件或子文件夹名
String[] list = file.list();
for(String s:list){
System.out.println(s);
}
2.获取指定目录下子文件或子文件夹对象
File[] files = file.listFiles();
for(File f:files){
System.out.println(f.getName()+"是否为目录"+f.isDirectory());
}
3.判断该文件或文件夹是否存在
boolean exists = file.exists();
if(exists){
System.out.println("该文件已存在");
}else{
System.out.println("该文件不存在");
file.mkdirs();
}
4.判断是否为文件或文件夹
boolean file1 = file.isFile();
boolean directory = file.isDirectory();
1.4File递归查找
public class Test04 {
public static void main(String[] args) {
File f=new File("demo");
print(f);
}
public static void print(File file){
if(file.isFile()){
System.out.println(file.getName()); //出口
}else{
//获取该文件夹下的所有文件
File[] files = file.listFiles();
//遍历文件
for(File f:files){
print(f); //递归
}
}
}
2.IO流
2.1分类
IO流提供了四个基类:
①InputStream: 字节输入流
②OutputStream: 字节输出流
③Reader: 字符输入流
④Writer: 字符输出流
2.2字节输出流
OutputStream os=new FileOutputStream("路径",true);//允许追加内容
String str="hello world";
os.write(str.getBytes());//字符串转换为字节数组类型 getBytes();
os.write(str.getBytes()); //指定写入内容的个数
//必须关闭该流
os.close();
2.3字节输入流
InputStream is=new FileInputStream("路径");
byte[] bs=new byte[50];//存放读取的字节
int read=-1;//表示读取字节的个数.
while ( (read=is.read(bs)) !=-1 ){
String str=new String(bs,0,read); //0,read表示读取的字节个数
System.out.println(str);
}
is.close();
2.4字符输出流
字节流,适合读取的单位为字节类型,适合读取音频,视频,压缩等
字符流适合读取文本类,一定不适合音频和视频操作。
public class Test09 {
public static void main(String[] args) throws IOException {
Writer w=new FileWriter("demo02/f.txt");
w.write("你好,李焕英!",0,3);
w.close();
}
}
2.5字符输入流
Reader r=new FileReader("路径");
1.//一次读取一个字符
int read=-1;
while ( (read=r.read())!=-1 ){
System.out.print((char)read);
}
2.一次读取多个字符
char[] cs=new char[50];
int size=-1;
while ( (size=r.read(cs))!=-1 ) {
System.out.println(new String(cs, 0, size));
}
3.缓存流
在基础流上再一次做了封装。提高io的效率。(容器的大小不能高于水车大小。 )
3.1BufferInputStream
InputStream is=new FileInputStream("路径");
BufferedInputStream bis=new BufferedInputStream(is);
int a=-1;
while ( (a=bis.read())!=-1 ){
System.out.print((char) a);
}
bis.close();
is.close();
3.2BufferOutputStream
OutputStream os=new FileOutputStream("a.txt");
BufferedOutputStream bos=new BufferedOutputStream(os);
String str="hello world java ai开发";
bos.write(str.getBytes());
bos.close();
os.close();
4.对象流
把java中的对象写入到文件【网盘】中,或把文件中写入得java对象,读取到程序中的过程。
4.1序列化(存档)
Game game=new Game("李白",16,100,60);
OutputStream os=new FileOutputStream("wzry/info/p1.txt");
ObjectOutputStream oos=new ObjectOutputStream(os);
//存档方法 java.io.NotSerializableException: 没有序列化。---
oos.writeObject(game);
oos.close();
os.close();
4.2反序列化(读档)
InputStream is=new FileInputStream("wzry/info/p1.txt");
ObjectInputStream ois=new ObjectInputStream(is);
//读档
Object o = ois.readObject();
System.out.println(o);
ois.close();
is.close();