File类
File
类的实例是不可变的;也就是说,一旦创建,File
对象表示的抽象路径名将永不改变。
mkdir()方法
创建此抽象路径名指定的目录。
createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
delete()方法
删除此抽象路径名表示的文件或目录。
exists()
测试此抽象路径名表示的文件或目录是否存在。
length()
返回由此抽象路径名表示的文件的长度。
renameTo(File file)
重新命名此抽象路径名表示的文件。
getCanonicalPath()
返回此抽象路径名的规范路径名字符串。
getParentFile()
返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回null
getPath()
将此抽象路径名转换为一个路径名字符串。
getName()
返回由此抽象路径名表示的文件或目录的名称。
Java中的File类以抽象的方式代表文件名和目录路径名,主要用于文件和目录的创建、文件的查找和删除等。
四种构造方法创建File对象:
1.File(File parent, String child)
通过给定的父抽象路径名和子路径名(字符串)来创建File实例。
2.File(String pathname)
将给定路径名(字符串)转换成抽象路径名来创建File实例。
3.File(String parent, String child)
根据parent路径名(字符串)和child路径名(字符串)创建File实例。
4.File(URI uri)
将给定的uri转换成抽象路径名来创建File实例。
主要方法:
1.String getName()
返回文件或目录的名称。
String str ="/Java";
File f = new File(str);
System.out.println(f.getName());
输出结果:java
2.String getParent()
返回父路径名字符串,如果没有指定父目录,返回null。
String str ="/java/jre";
File f = new File(str);
System.out.println(f.getParent());
输出结果:\java
3.File getParentFile()
返回父路径的抽象路径名,如果没有指定父目录,返回null。
结果同上
4.String getPath()
路径名字符串。
String str ="/java/jre";
File f = new File(str);
System.out.println(f.getPath());
输出结果:\java\jre
5.boolean isAbsolute()
是否为绝对路径名。
String str ="/java/jre";
File f = new File(str);
System.out.println(f.isAbsolute());
输出结果:false
6.String getAbsolutePath()
返回绝对路径名字符串。
String str ="/java/jre";
File f = new File(str);
System.out.println(f.getAbsolutePath());
输出结果:E:\java\jre
7.boolean canRead()
程序是否可以读取文件。
8.boolean canWrite()
程序是否可以修改文件。
9.boolean exists()
文件或目录是否存在。
10.boolean isDirectory()
文件是否是一个目录。
11.boolean isFile()
是否是一个标准文件。
12.long lastModified()
最后一次被修改的时间。
13.long length()
文件的长度。
String str ="/java/jre";
File f = new File(str);
System.out.println("是否可读:"+f.canRead());
System.out.println("是否可修改:"+f.canWrite());
System.out.println("是否存在:"+f.exists());
System.out.println("是否是一个目录:"+f.isDirectory());
System.out.println("是否是一个标准文件:"+f.isFile());
System.out.println("最后一次被修改的时间:"+new Date(f.lastModified()));
System.out.println("文件的长度:"+f.length());
输出结果:
是否可读:true
是否可修改:true
是否存在:true
是否是一个目录:true
是否是一个标准文件:false
最后一次被修改的时间:Thu Mar 23 15:05:26 CST 2017
文件的长度:4096
14.boolean createNewFile() throws IOException
如果不存在此名称的文件时,创建一个新的文件。
15.boolean delete()
删除文件或目录。
16.String[] list()
返回目录中的文件和目录的名称所组成字符串数组。
17.File[] listFiles()
返回一个路径名数组,这些路径名为目录中的文件。
18.boolean mkdir()
创建目录。
19.boolean mkdirs()
创建目录,包括父目录。
String dir ="/text";
String txt ="/text.txt";
File f = new File(dir);
if(!f.exists()){
f.mkdirs();
File file = new File(dir+txt);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
File files = new File(dir+txt);
System.out.println("创建的文件夹和文件:"+files);
输出结果:
创建的文件夹和文件:\text\text.txt
20.boolean renameTo(File dest)
重新命名文件。
21.boolean setLastModified(long time)
设置文件或目录的最后一次修改时间。
22.boolean setReadOnly()
标记文件或目录,只可对其进行读操作。
23.static File createTempFile(String prefix, String suffix, File directory) throws IOException
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成名称。
24.static File createTempFile(String prefix, String suffix) throws IOException
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成名称。
File f = null;
try{
f = File.createTempFile("text", ".txt", new File("E:/"));
System.out.println("路径: "+f.getAbsolutePath());
}catch(Exception e){
e.printStackTrace();
}
输出结果:
路径: E:\text421311575819235311.txt
25.boolean equals(Object obj)
抽象路径名与给定对象是否相等。
例子:
String dirname = "/java/jre"; //声明变量路径
File file = new File(dirname); //根据路径创建实例
if (file.isDirectory()) { //判断文件是否是目录
System.out.println( "目录名称:" + dirname);
String s[] = file.list(); //目录下的文件夹和文件
for (int i=0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]); //根据父路径和子路径创建实例
if (f.isDirectory()) {
System.out.println(s[i] + "是文件夹");
} else {
System.out.println(s[i] + "是文件");
}
}
} else {
System.out.println(dirname + "不是目录");
}
输出结果;
目录名称:/java/jre
bin是文件夹
COPYRIGHT是文件
lib是文件夹
LICENSE是文件
README.txt是文件
release是文件
THIRDPARTYLICENSEREADME-JAVAFX.txt是文件
THIRDPARTYLICENSEREADME.txt是文件
Welcome.html是文件
1.getCacheDir()和getFilesDir():
getCacheDir()方法用于获取/data/data/cache目录
getFilesDir()方法用于获取/data/data/files目录
2.getExternalFilesDir()和getExternalCacheDir()
应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?
通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据.如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。
而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项,如果要保存下载的内容,就不要放在以上目录下。
专门写一个方法来获取缓存地址,如下所示:
public String getDiskCacheDir(Context context) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data/cache 这个路径,而后者获取到的是 /data/data/cache 这个路径。
注意:这两种方式的缓存都会在卸载app的时候被系统清理到,而开发者自己在sd卡上建立的缓存文件夹,是不会跟随着app的卸载而被清除掉的。
3.Android开发:filePath放在哪个文件夹
Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/com.my.app-1.apk
getPackageResourcePath() = /data/app/com.my.app-1.apk
getCacheDir() = /data/data/com.my.app/cache
getDatabasePath(“test”) = /data/data/com.my.app/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
getFilesDir() = /data/data/com.my.app/files