#### File
Java程序中用来表示文件对象或者文件夹对象的类
//使用File对象来描述一个文件
File f = new File("E:\\abc"); // E:\三生三世.OGG
//获取文件名
String name = f.getName();
//获取文件路径
String path = f.getPath();
//获取绝对路径
String absPath = f.getAbsolutePath();
boolean isFile = f.isFile();
System.out.println("是否是文件:"+isFile);
//检测文件是否存在
boolean r = f.exists();
文件操作
创建文件
boolean r = f.createNewFile();
创建文件夹(一级目录)
boolean r = f.mkdir();
创建文件夹(多级目录)
boolean r = f.mkdirs();
文件夹遍历
//遍历所有的文件(名称)
String[] names = f.list();
结合文件名过滤器遍历出满足条件的子文件/子文件夹
String[] names = f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
遍历子级文件/文件夹对象
File[] fs = f.listFiles();
根据文件名过滤
File[] fs = f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".avi") || name.endsWith(".mp4");
}
});
//根据文件对象来过滤
File[] fs = f.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
String name = file.getName();
return name.endsWith(".avi") || name.endsWith(".mp4");
}
});
文件删除
boolean isOk = f.delete()
//程序退出时删除
f.deleteOnExit();
文件夹删除,注意文件夹在删除时必须保证文件夹为空文件夹(没有子级)
重命名文件
boolean isOk = f.renameTo(nF);
注意如果新的文件(目标)和原来文件不在同一文件夹下,该方法实现了“剪切”功能
文件大小
long len = nF.length();
修改时间(毫秒数)-->可以使用SimpleDateFormat转换
long time = nF.lastModified();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sf.format(new Date(time));
System.out.println(s);
#### DataOutputStream & DataInputStream
原子类型(基本数据类型)输出流,辅助流(装饰者),辅助InputStream实现按原子类型输出,DataInputStream也一样,辅助原子类型输入
//写操作
DataOutputStream out = new DataOutputStream(
new FileOutputStream("E:\\abc\\data.txt"));
//输出内容(按类型)
out.writeInt(50);
out.writeBoolean(true);
out.writeUTF("你好abc");
//关闭
out.close();
//读操作(注意顺序要和写的顺序一致)
DataInputStream in = new DataInputStream(new FileInputStream("E:\\abc\\data.txt"));
//读内容
int a = in.readInt();
boolean b = in.readBoolean();
String str = in.readUTF();
//关闭
in.close();
#### 字符流
按字符的大小输入或者输出,输入用Reader的子类,输出用Writer子类
Reader r = new FileReader("E:\\abc\\123.txt");
//使用缓冲字符输入流
BufferedReader br = new BufferedReader(r);
//读取内容(普通的读取方式,一次一个字符)
int content;
while((content = br.read())!=-1){
System.out.print((char)content);
}
基于缓冲读取(可以按行来读取)
String str ;
while((str = br.readLine())!=null){
System.out.println(str);
}
关闭流
r.close();
br.close();
##### 字符输出流
Writer w = new FileWriter("E:\\abc\\www.txt");
如果要在原来的基础上添加内容那么可以在构造时添加append变量值为true
Writer w = new FileWriter("E:\\abc\\www.txt",true);
//加上缓冲输出
BufferedWriter bw = new BufferedWriter(w);
//写内容到磁盘
bw.write("你好你好阿大使大赛肯德基阿萨德");
//缓冲流关闭之前要flush
bw.flush();
//关闭
bw.close();
w.close();
#### 流关系
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
用他们的子类:FileInputStream,FileOutputStream,FileReader,FileWriter
缓冲流
字节 字符
输入 BufferedInputStream BufferedReader
输出 BufferedOutputStream BufferedWriter
##### RandomAccessFile
随机存取的二进制文件
//构造的第二参数表示操作的模式,r表示读 w表示写
RandomAccessFile ra = new RandomAccessFile(new File("E:\\abc\\ra.txt"),"rw");
//设置大小为2k
ra.setLength(2048);
ra.writeInt(500);
ra.writeUTF("你好");
//从1k的位置开始写
ra.seek(1024);
ra.writeUTF("abc");
#### Properties
键值对存取文件(一般可以用作一些配置文件)
读:
FileInputStream in = new FileInputStream("E:\\abc\\config.ini");
//创建Properties
Properties p = new Properties();
//加载文件
p.load(in);
//按键取值
String color = p.getProperty("color");
//带默认值的读取
String abc = p.getProperty("abc", "默认值");
String fontSizeStr = p.getProperty("fontSize");
//关闭流
in.close();
写:
//输出流关联要写到的文件
FileOutputStream out = new FileOutputStream("E:\\abc\\config.ini");
Properties p = new Properties();
//设置要保存的属性(键值对)
p.setProperty("fontSize", "2000");
p.setProperty("color", "blue");
p.setProperty("mode", "night");
p.setProperty("menuType", "right");
//保存
p.store(out, "122222");
//关闭流
out.flush();
out.close();
注意:修改内容不覆盖原来的内容一定要先用输入流加载文件到Properties中,关闭输入流之后修改再保存,如:
FileInputStream in = new FileInputStream("E:\\abc\\config.ini");
//创建Properties
Properties p = new Properties();
//加载文件
p.load(in);
in.close(); //修改之前关闭
//设置要保存的属性(键值对)
p.setProperty("fontSize", "20");
p.setProperty("color", "red");
FileOutputStream out = new FileOutputStream("E:\\abc\\config.ini");
//保存
p.store(out, "aaaaaa");
out.flush();
out.close();
#### PrintWriter
//创建打印机对象,第二个参数autoFlush可以省略,加上为true的意思是自动刷新缓冲区
PrintWriter pw = new PrintWriter(new FileOutputStream(
"E:\\abc\\print.txt"),true);
//输出内容(不换行)
pw.print("Hello123");
//换行输出
pw.println("你好abc");
//关闭
pw.close();