一、具体内容
java.io包中保存了所有的IO操作的类(原始提供的类),而在整个IO包中核心的就是五个类,一个接口
- 文件操作类:File;
- 流操作类:InputStream、OutputStream、Reader、Writer;
- 一个接口:Serializable。
二、File的基本操作
在整个java.io包中,File类是唯一一个与文件本身操作有关的类,即:通过File类可以实现文件的创建、删除、目录的列表等操作。与操作内容没有任何关系
如果要是使用File类那么必须准备出一个合理的路径,所以在File类的构造方法定义:
- 设置操作完整路径:
public File(String pathname);
在java企业开发中都会使用此方法。 - 设置父路径与子文件:
public File(String parent, String child);
主要在安卓中使用。
范例:操作File
- 在使用File定义路径的时候必须要考虑分隔符的问题,记住:“\”为“\\”;
package lisy;
import java.io.File;
public class Demo {
public static void main(String[] args) {
//在设置路径的时候并不会判断文件的具体内容
File file = new File("e:\\test.txt");//要操作E盘的test.txt文件
System.out.println(file);
}
}
- 在File类中提供了以下几个基本的操作方法:
1. 创建新文件:public boolean createNewFile() throws IOException;
创建文件成功返回true,如果文件存在则无法创建,返回false,如果文件路径出错就抛出异常;
2.判断路径是否存在:public boolean exists();
3.删除路径:public boolean delete();
package lisy;
import java.io.File;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
//在设置路径的时候并不会判断文件的具体内容
File file = new File("e:\\test.txt");//要操作E盘的test.txt文件
//file.createNewFile();//创建新文件
if(file.exists()) {//文件存在
file.delete();//删除文件
}else {
System.out.println(file.createNewFile());
}
}
}
三、File操作的问题
拿上面的程序来讲,会存在有三个重要的问题:
问题一:
在实际的项目开发过程之中,往往都会选择在windows下做开发,而后在Linux下做部署。对于两个操作系统而言,最为麻烦的问题在于路径分隔符问题:
1. windows的路径分隔符:\ (反斜杆);
2.Linux的路径分隔符:/ (正斜杆)。
以上的程序代码,直接使用了“\\”,很明显这是windows的。为此在实际的开发过程之中,一定要记住一个原则:不要直接写上路径分隔符,在File类中定义有一个常量:public static final String separator。
File file = new File("e:"+File.separator+"test.txt");//要操作E盘的test.txt文件
问题二:
文件的创建会存在有延迟操作:这种延迟操作很多时候是可以忽略掉的,但是也有一点不能够忽略掉,就是你刚刚删除了一个文件,而后又创建了一个文件,就有可能出现创建不了的情况。
问题三:
如果说现在给定的路径包含有目录,那么就将无法创建,必须先存在目录后才可以创建文件。
- 取得父路径:
public File getParentFile()
- 创建目录:
public boolean mkdirs()
package lisy;
import java.io.File;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
//在设置路径的时候并不会判断文件的具体内容
File file = new File("e:"+File.separator+"hello"+File.separator+"nihao"+File.separator+"test.txt");
//file.createNewFile();//创建新文件
if(!file.getParentFile().exists()) {//父路径不存在(重点)
file.getParentFile().mkdirs();//创建父目录(重点)
}
if(file.exists()) {//文件存在
file.delete();//删除文件
}else {
System.out.println(file.createNewFile());
}
}
}
四、File类的其他操作
- 判断路径是否为目录:
public boolean isDirectory();
- 判断路径是否为文件:
public boolean isFile()
- 取得文件大小(字节):
public long length()
文件大小是以字节为单位,使用long描述。 - 最后一次修改日期 :
public long lastModified()
package lisy;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Demo {
public static void main(String[] args) throws IOException {
File file = new File("e:"+File.separator+"my.jpg");
if(file.exists()) {//文件存在
System.out.println("是否为目录?"+file.isDirectory());
System.out.println("是否为文件?"+file.isFile());
System.out.println("文件大小:"+new BigDecimal((double)file.length() / 1024 /1024)
.divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)+"M");
System.out.println("最近修改日期:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
.format(new Date(file.lastModified())));
}
}
}
在File中除了文件之外还会存在有文件夹,所以对于文件夹应该要进行结构的列出:
- 列出目录:
public File[]listFiles();
范例:列出目录中的全部内容
package lisy;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Demo {
public static void main(String[] args) throws IOException {
File file = new File("e:"+File.separator);
if(file.exists()&&file.isDirectory()) {//文件存在
File result [] = file.listFiles();//列出全部的目录内容
for(int x = 0;x<result.length;x++)
System.out.println(result[x]);
}
}
}
范例:列出目录中的全部内容。
package lisy;
import java.awt.print.Printable;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Demo {
public static void main(String[] args) throws IOException {
File file = new File("e:"+File.separator);
print(file);
}
public static void print(File file) {
if(file.isDirectory()) {//当前的路径为目录
File result [] = file.listFiles();//进行列出操作
if(result != null) {
for(int x = 0;x<result.length;x++) {
print(result[x]);
}
}
}
System.out.println(file);
//恶意程序别搞哦。
//System.out.println(file.delete());这个东西千万别用 这个将删除
//e盘下的所有内容。
}
}