Java中的File文件类详解
文件操作在Java的io操作中占有十分重要的地位,本文从以下几个方面来接受Java中对文件的操作。
1.Java中新建或者删除一个文件,文件夹以及createNewFile(),delete(),mkdir(),mkdirs()函数的使用。
2. 判断文件的函数:exists(),isFile(),isAbsolute(),isDirectory(),canRead(),canWrite(),isHidden()函数的使用。
3. 文件属性的函数:lastModified(),length(),list(),listFiles(),renameTo(),getName(),getParent(),getPath(),getAbsolutePath(),delete()函数的使用。
4. 文件输入输出操作中的FileInputStream(),InputStreamReader()的使用和差别。
一:创建一个文件或者文件夹:
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:/hust/file.txt");
File directory = new File("D:/hust/hk");
File dir = new File("D:/hank/hu/file.txt");
if (!directory.exists()) {
System.out.println(directory.mkdir());
}
if (!dir.exists()) {
System.out.println(dir.mkdirs());
}
if (!file.exists()) {
System.out.println(":" + file.createNewFile());
}
}
}
上面介绍了创建文件,以及创建文件夹的两种方式。首先是创建文件:
在D盘的hust的目录下面新建一个file.txt文件,通过exist()来判断文件是否已经存在,如果文件不存在调用createNewFile(),CreateNewFile()返回一个Boolean值,如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false。
创建文件夹如果指定的文件夹不存在可以通过mkdir(),mkdirs()来创建文件夹。
mkdir(),和mkdirs()都返回一个Boolean值,如果指定文件夹不存在并且通过mkdir()或者mkdirs()创建成功则返回一个true 值否则返回false。
mkdir(),和mkdirs()的区别是如果新建的文件目录的上级目录不存在则mkdir()回报异常不能成功创建文件夹,而mkdirs(),会将目录与上级目录一起创建。
二:判断文件属性的函数:
exists()判断文件是否存在如果不存在则返回一个true,否则返回一个false。isFile()和isDirectory()分别用于判断是不是文件和是不是文件夹,canRead(),canWrite(),isHidden(),分别用于判断文件是否可读,可写,是否隐藏。
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:/hust/file.txt");
File directory = new File("D:/hust/hk");
File dir = new File("D:/hank/hu/file.txt");
if (!directory.exists()) {
System.out.println(directory.mkdir());
}
if (!dir.exists()) {
System.out.println(dir.mkdirs());
}
if (!file.exists()) {
System.out.println(":" + file.createNewFile());
}
file.setReadable(true);
file.setWritable(false);
System.out.println("isFile:"+file.isFile()+"\tisDirectory:"+file.isDirectory()+"\tcanRead:"+file.canRead()+"\tcanWrite:"+file.canWrite());
System.out.println(dir.isFile()+":"+dir.isDirectory());
}
}
输出结果如下:
isFile:true isDirectory:false
canRead:true canWrite:false
isFile:false isDirectory:true
三:文件属性的函数
:lastModified(),length(),list(),listFiles(),renameTo(),getName(),getParent(),getPath(),getAbsolutePath()函数的使用。
public class FileTest {
public static void main(String[] args) throws IOException {
File dir = new File("D:/hust");
String[] str=dir.list();
File[] str1=dir.listFiles();
System.out.println("lastModified():"+new Date(dir.lastModified()));
System.out.println("length():"+dir.length()+"\ngetAbsolutePath:"+dir.getAbsolutePath());
System.out.println("getPath:"+dir.getPath());
System.out.println("getName:"+dir.getName()+"\ngetParent:"+dir.getParent());
for(int j=0;jout.println(":"+str1[j]);
for(int i=0;iout.println(":"+str[i]);
}
}
}
输出结果:
lastModified():Mon Aug 01 22:01:15 CST 2016
length():0
getAbsolutePath:D:\hust
getPath:D:\hust
getName:hust
getParent:D:\
:D:\hust\file.txt
:D:\hust\hank
:D:\hust\hk
:D:\hust\king
:file.txt
:hank
:hk
:king
lastModified()函数返回一个long类型的值,上面的类子中通过Date函数将long类型的值转化为了日期。getAbsolutePath()返回目录的绝对路径。最重要的两个方法是list(),和listFiles(),list()是返回目录下面所有的目录或文件的名称,返回的是一个字符串数组。而listFiles()返回的是目录下面的文件和目录数组,返回的是文件和目录的绝对路径。
Delete()的用法,如何删除一个文件和删除一个文件夹。
删除一个文件比较简单,直接判断文件是否存在,如果存在的话就删除,如果文件不存在可以不用操作。但是删除一个文件夹比较麻烦,我们不能够直接的删除一个文件夹,删除文件夹时必须保证该文件夹为空,也就是说文件夹里面的文件和文件夹要全部被删除之后才能够删除该文件夹。下面是实例:
public class FileTest {
public static void main(String[] args) throws IOException {
deleteFiles("D:/Xiaomi");
}
public static void deleteFiles(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File[] files = file.listFiles();
for (File myfile : files) {
System.out.println(":" + myfile.getAbsolutePath());
deleteFiles(myfile.getAbsolutePath());
}
file.delete();
}
}
}
上面的D:/xiaomi是一个文件夹,它的下面还有其他的文件夹与文件,如果直接调用delete()函数的话,是删除不了的。因此利用递归的算法先删除其里面的文件和文件夹,在删除D:/xiaomi就可以了。
四:文件输入输出操作中的FileInputStream(),InputStreamReader()的使用和差别。
FileInputStream ()是使用字节方式输入,InputStreamReader()字符方式输入。一般字节方式输入用来处理图片,声音,图像等二进制流。
public class FileTest {
public static void main(String[] args) throws IOException {
// deleteFiles("D:/Xiaomi");
System.out.println(":" + ReadFileByByte("D:/File1/心理健康常识.txt"));
System.out.println(":" + ReadFileByChar("D:/File1/心理健康常识.txt"));
}
public static String ReadFileByByte(String filepath)
throws FileNotFoundException {
File file = new File(filepath);
StringBuffer sb = new StringBuffer();
if (!file.exists() || !file.isFile()) {
System.out.println("this file is not exist!");
return null;
}
FileInputStream fileinputstream = new FileInputStream(file);
byte[] temp = new byte[1024];
try {
while (fileinputstream.read(temp) != -1) {
sb.append(new String(temp));
}
fileinputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(":"+sb.length());
return sb.toString();
}
public static String ReadFileByChar(String filepath) {
File file = new File(filepath);
if (!file.exists() || !file.isFile()) {
return null;
}
StringBuffer content = new StringBuffer();
try {
char[] temp = new char[1024];
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(
fileInputStream);
while (inputStreamReader.read(temp) != -1) {
content.append(new String(temp));
temp = new char[1024];
}
fileInputStream.close();
inputStreamReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}