File类表示文件或目录的抽象路径名称。Java中的抽象路径名称和路径名称两个概念是针对跨平台需求而设计的,前者是路径的抽象、操作系统无关的表示,而后者是路径的与操作系统相关的表示。
抽象路径名称包含以下两个部分:
第一个名称可能是一个路径名,或者是一个主机名(在微软Windows的UNC定义的路径名中)。每个后续的名称表示一个路径,最后一个名称表示一个路径或者是一个文件。没有前缀且名称序列为空的路径名称为空抽象路径名称。
抽象路径名称和路径名称之间的转换是依赖于系统。当抽象路径名被转换为路径名时,名字之间都由单独一个默认分割符分割。默认的名称分割符是由系统属性file.separator定义,并且可以通过File类的静态属性separator和separatorChar访问。当一个路径名称字符串被转换为一个抽象的路径名时,它包含的名称可以由默认名称分割符分割,或者由下层系统支持的任何其他的名称分割符分割。
无论是不是抽象的,路径都分为绝对路径和相对路径两类。绝对路径是提供了定位文件的完全信息的路径名。相对路径是以某一路径名为参照下的路径名。默认情况下,java.io包往往是使用以当前的用户路径(由系统属性user.dir决定)为参考的相对路径。
通过File类的getParent()方法可以获得当前路径的父路径,即包含该路径的最底层的路径。
File类的实例是不可更改的,即由File对象表示的抽象路径是不会改变的。
static String pathSeparator;
static char pathSeparatorChar;
依赖于当前系统的路径分割符,前一个是字符串类型,后一个是字符型。
static String separator;
static char separatorChar;
依赖于当前系统的默认名称分割符,前一个是字符串类型,后一个是字符型。
/**
* Test the path separator and separator static field in File class
*/
import java.io.File;
public class FileFieldTest
{
public static void main(String[] args)
{
System.out.println("path separator: "+ File.pathSeparator);
System.out.println("path separator(char): " + File.pathSeparatorChar);
System.out.println("separator: " + File.separator);
System.out.println("separator(char):" + File.separatorChar);
}
}
实验所用系统为ubuntu 14.04,输出如下图:
File(File parent, String child);
根据父抽象路径和子路径字符串创建一个File实例
File(String pathname);
根据指定的路径名称创建一个File实例
File(String parent, String child);
根据指定的路径名和子路径字符串创建一个File实例
File(URI uri);
根据文件的资源定位符创建File实例。
boolean canExecute()
测试该抽象路径所指的文件是否是可执行文件
boolean canRead()
测试该抽象路径所指的文件是否可读
boolean canWrite()
测试该抽象路径所指的文件是否可写
boolean exists()
测试该抽象路径所指的文件是否存在
boolean isAbsolute()
测试该抽象路径是否为绝对路径
boolean isDirectory()
测试该抽象路径指向的文件是否为目录
boolean isFile()
测试该抽象路径指向的文件是否为标准的文件
boolean isHiddien()
测试该抽象路径所指的文件是否是隐藏文件
import java.io.File;
import java.util.Scanner;
public class FileStatusQuery
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String filePathName = sc.nextLine();
File file = new File(filePathName);
System.out.println(" canExecute: " + file.canExecute());
System.out.println(" canRead: " + file.canRead());
System.out.println(" canWrite: " + file.canWrite());
System.out.println(" exists: " + file.exists());
System.out.println(" isAbsolute: " + file.isAbsolute());
System.out.println("isDirectory: " + file.isDirectory());
System.out.println(" isFile: " + file.isFile());
System.out.println(" isHidden: " + file.isHidden());
}
}
boolean createNewFile()
当且仅当不存在同名的文件时,创建一个该抽象路径指向的新的空文件。
static File createTempFile(String prefix, String suffix)
在默认的临时目录中创建一个空文件,该文件的名称由两个输入的代表前缀和后缀的字符串生成。
static File createTempFile(String prefix,String suffix,File directory)
在制定的目录中存在一个空文件,该文件的名称由两个输入的代表前缀和后缀的字符串生成。
boolean mkdir()
创建由该抽象路径指向的目录
boolean mkdirs()
创建该抽象路径执行的目录,同时创建包含该目录且之前不存在的父目录。
boolean delete()
删除该抽象路径指向的文件或目录
boolean deleteOnExit()
请求当虚拟机退出时删除该抽象路径指向的文件或目录
import java.io.File;
import java.util.Scanner;
import java.io.IOException;
public class FileCreation
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String inputPath = sc.nextLine();
try
{
File file = new File(inputPath);
if (file.createNewFile())
{
System.out.println("File creation succeeds! ");
}
File tempFile = File.createTempFile("Log", ".log");
System.out.println("Temp file creation: Path" + tempFile.getAbsolutePath());
file.deleteOnExit();
File tempFile2 = File.createTempFile("Log", ".log", new File("Hello"));
System.out.println("Temp file createion: Path" + tempFile2.getAbsolutePath());
tempFile2.delete();
}catch(IOException e)
{
System.out.println(e.toString());
}
String dirName = sc.nextLine();
File dir = new File(dirName);
if (dir.mkdir())
{
System.out.println("Dir creation succeeds!");
}
String longDirName = sc.nextLine();
File longDir = new File(longDirName);
if(longDir.mkdir())
{
System.out.println("Long dir creation succeeds!");
}else
{
System.out.println("Long dir creation fails!");
}
if(longDir.mkdirs())
{
System.out.println("Long dir creation succeeds!");
}
}
}
File getAbsoluteFile()
返回该抽象路径的绝对形式
String getAbsolutePath()
返回该抽象路径的绝对路径名
File getCanonicalFile()
返回该抽象路径的规范形式
String getCanonicalPath()
返回该抽象路径的规范形式名
String getName()
返回由该抽象路径所指的文件或路径的名称
String getParent()
返回该抽象路径的父路径的抽象路径名称。如果指定的路径名称中没有父目录,则返回null。
File getParentFile()
返回该抽象路径的父抽象路径。如果指定的路径名称中没有父目录,则返回null。
File getPath()
将抽象路径名转换为路径名。
long getFreeSpace()
返回该抽象路径所指分区的未分配字节数
long getTotalSpace()
返回该抽象路径所指分区的总字节数
long getUsableSpace()
返回该抽象路径所指分区的已用字节数
import java.io.File;
import java.io.IOException;
public class FileGetters
{
public static void main(String[] args)
{
File file = new File("Hello/hello1.test");
File absoluteFile = file.getAbsoluteFile();
System.out.println("AbsoulteFile: " + absoluteFile.getPath());
String absolutePath = file.getAbsolutePath();
System.out.println("AbsolutePath: " + absolutePath);
try{
File canonicalFile = file.getCanonicalFile();
System.out.println("CanonicalFile: " + canonicalFile.getPath());
String canonicalPath = file.getCanonicalPath();
System.out.println("CanonicalPath: " + canonicalPath);
}catch(IOException e)
{
System.out.println(e.toString());
}
System.out.println("FileName: " + file.getName());
System.out.println("Parent: " + file.getParent());
File parentFile = file.getParentFile();
if (parentFile != null)
System.out.println("ParentFile: " + parentFile.getPath());
System.out.println("++++++++++++++++++++++++++++++++++");
System.out.println("FreeSpace: " + file.getFreeSpace());
System.out.println("TotalSpace: " + file.getTotalSpace());
System.out.println("UsableSpace: " + file.getUsableSpace());
}
}
boolean setExecutable( boolean executable)
为该抽象路径设置执行权限的便利方法
boolean setExecutable(boolean executable, boolean ownerOnly)
为该抽象路径设置其拥有者或所有人的执行权限
boolean setLastModified(long time)
为该抽象路径指定的文件或目录设置最后修改时间
boolean setReadable(boolean readable)
为该抽象路径设置用户的读权限
boolean setReadable(boolean readable, boolean ownerOnly)
为该抽象路径设置其拥有者或所有人的读权限
boolean setReadOnly()
标志该文抽象路径指向的路径只允许读操作。
boolean setWritable()
为该抽象路径设置用户的写权限
boolean setWritable(boolean writable, boolean ownerOnly);
为该抽象路径设置其拥有者或所有人的写权限
String[] list()
返回该抽象路径所指目录中的文件或目录的名称字符串矩阵
String[] list(FilenameFilter filter)
返回该抽象路径所指目录中满足filter的文件或目录的名称字符串矩阵
File[] listFiles()
返回该抽象路径所指目录中的抽象路径矩阵
File[] listFiles(FileFilter filter)
返回该抽象路径所指目录中满足filter的抽象路径矩阵
File[] listFiles(FilenameFilter filter)
返回该抽象路径所指目录中满足filter的抽象路径矩阵
static File[] listRoots()
列出所有文件系统可用的根目录
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileFilter;
public class FileLists
{
public static void main(String[] args)
{
File file = new File("./");
for (String subfileName : file.list())
System.out.print(subfileName + " ");
System.out.println("");
System.out.println("------------------------");
for (File subfile : file.listFiles())
System.out.print(subfile.getPath() + " ");
System.out.println("");
System.out.println("------------------------");
for (String subfileName : file.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
if (name.endsWith(".class"))
return true;
return false;
}
}))
{
System.out.print(subfileName+" ");
}
System.out.println("");
System.out.println("------------------------");
for(File subfile : file.listFiles(new FileFilter()
{
@Override
public boolean accept(File pathname)
{
if (pathname.getPath().endsWith(".java"))
return true;
return false;
}
}))
{
System.out.print(subfile.getPath() + " ");
}
System.out.println("");
System.out.println("------------------------");
for(File subfile : file.listFiles(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
if (name.endsWith(".java"))
return true;
return false;
}
}))
{
System.out.print(subfile.getPath() + " ");
}
System.out.println("");
System.out.println("------------------------");
for(File subfile : File.listRoots())
{
System.out.print(subfile.getPath() + " ");
}
System.out.println("");
}
}
long lastModified()
该抽象路径所指文件的最后修改时间
long length()
该抽象路径所指文件的长度(字节)
boolean renameTo(File dest)
重命名该抽象路径所指文件
http://docs.oracle.com/javase/8/docs/api/