文件操作
知识点概要:
1 File类简介
代码实例:
package com.netease.java_learn.file;
import java.io.File;
import java.io.IOException;
public class FileDemo01 {
private static final String filePath = "src/files/hello.txt";
private static final String emptyFilePath = "src/files/empty_hello.txt";
private static final String directiryPath = "src/files";
public static void main(String[] args) {
// File myFile = new File(filePath);
// File myFile = new File(directiryPath);
File myFile = new File(emptyFilePath);
// 判断指定文件或者目录是否存在
if (myFile.exists()) {
if (myFile.isFile()) {// 判断是否为文件
System.out.println(filePath + "是一个文件");
} else if (myFile.isDirectory()) {// 判断是否为目录
System.out.println(filePath + "是一个目录");
}
} else {
System.out.println("文件不存在,新建一个");
try {
// 新建一个新文件
myFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.err.println("新建文件" + emptyFilePath + "失败");
}
System.out.println("新建文件成功");
}
}
}
2 文件的创建、删除和重命名
代码实例:
package com.netease.java_learn.file;
import java.io.File;
import java.io.IOException;
/**
* 演示文件的新建、删除和重命名
*
* @author louxj424
*
*/
public class FileDemo02 {
private static final String ORIGIN_FILE = "hello.txt";
private static final String RENAME_FILE = "src/new_hello.txt";
public static void main(String[] args) {
// 这里的new只是在代码中生成一个带有参数的可操作的文件对象的句柄,并未真正创建文件。
// 依次尝试以下的路径变量,观察文件的生成位置,了解相对路径的概念。
// "hello.txt"、"../hello.txt"、"src/hello.txt"、"src/files/hello.txt"
File file = new File(ORIGIN_FILE);
// 判断文件是否存在
if (file.exists()) {
/*
* 重命名的同时移动文件,但这种操作可以跨文件目录,不能跨硬盘分区,跨分区移动需要使用专门的拷贝操作
*/
File nameto = new File(RENAME_FILE);
file.renameTo(nameto);
System.out.println("重命名成功");
file.delete();
if (!file.exists()) {
System.out.println("文件删除成功");
}
} else {
System.out.println("原文件不存在");
try {
System.out.println("正在为您创建新文件...");
// 创建新的文件
file.createNewFile();
System.out.println("恭喜,文件已经成功地创建!");
} catch (IOException e) {
System.out.println("文件无法创建");
e.printStackTrace();
}
}
}
}
执行两次上述代码,第一次执行时指定路径文件不存在,输出结果如下:
原文件不存在
正在为您创建新文件...
恭喜,文件已经成功地创建!
第二次执行时指定目录文件已经存在,输出结果如下所示:
重命名成功
文件删除成功
3 文件夹的创建、重命名、删除
代码实例1:文件夹的创建
package com.netease.java_learn.file;
import java.io.File;
/**
* 演示文件夹的新建
*
* @author louxj424
*
*/
public class DirectoryDemo01 {
private static final String DIRECTORY1 = "src/com/netease/java_learn/myFoder1";
private static final String DIRECTORY2 = "src/com/netease/java_learn/MyFolder2/one/two/three";
public static void main(String[] args) {
File folder1 = new File(DIRECTORY1);
File folder2 = new File(DIRECTORY2);
if (!folder1.exists() && !folder2.exists()) {
try {
// mkdir()用于创建一级目录
if (folder1.mkdir() == true) {
System.out.println("一级文件夹创建完成!");
}
// mkdirs()用于创建多级目录
if (folder2.mkdirs() == true) {
System.out.println("多级文件夹创建完成!");
}
} catch (Exception e) {
System.out.println("文件夹创建失败!");
}
} else {
System.out.println("有一个指定的文件夹已经存在!");
}
}
}
代码实例2:文件夹的重命名
package com.netease.fileoperation;
import java.io.File;
public class DirectoryDemo02 {
public static void main(String[] args) {
File folder=new File("src/com/netease/fileoperation/MyFolder");
File newFolder=new File("src/com/netease/fileoperation/MyFolder-new");
if (folder.renameTo(newFolder)) {
System.out.println("done");
}else
{
System.out.println("fail");
}
}
}
文件夹重命名成功的条件:
- 在同一个分区中
- 被重命名的路径事先不存在
代码实例3:文件夹的删除
package com.netease.fileoperation;
import java.io.File;
public class DirectoryDemo03 {
public static void main(String[] args) {
File folder=new File("src/com/netease/fileoperation/MyFolder");
//要求被删除的文件夹必须是空文件夹,如果该文件夹下包含了其他的文件或文件夹都会宣告失败。
if (folder.delete()) {
System.out.println("删除目录成功");
}
}
}
4 文件属性的读取
代码实例:
package com.netease.fileoperation;
import java.io.File;
/**
* 关注以下文件属性:
* 文件是否存在
* 读取文件名称
* 读取文件路径
* 读取文件绝对路径
* 读取文件的父级路径
* 读取文件大小
* 判断文件是否被隐藏
* 判断文件是否可读
* 判断文件是否可写
* 判断文件是否为文件夹
* @author louxj424
*
*/
public class ReadFileProperity {
public static void main(String[] args) {
File file = new File("text.txt");
// 1. 判断文件是否存在
System.out.println("判断文件是否存在:" + file.exists());
// 2. 读取文件名称
System.out.println("读取文件名称:" + file.getName());
// 3. 读取文件的相对路径
System.out.println("读取文件相对路径:" + file.getPath());
// 4. 读取文件绝对路径
System.out.println("读取文件绝对路径:" + file.getAbsolutePath());
// 5. 读取文件的父级路径
System.out.println("读取文件的父级路径:" + (new File(file.getAbsolutePath()).getParent()).toString());
// 6. 读取文件大小
System.out.println("读取文件大小:" + (float) file.length() / 1024 + " KB");
// 7. 判断文件是否被隐藏
System.out.println("判断文件是否被隐藏:" + file.isHidden());
// 8. 判断文件是否可读
System.out.println("判断文件是否可读:" + file.canRead());
// 9. 判断文件是否可写
System.out.println("判断文件是否可写:" + file.canWrite());
// 10. 判断文件是否为文件夹
System.out.println("判断文件是否为文件夹:" + file.isDirectory());
}
}
5 文件属性的设置
代码实例:
package com.netease.fileoperation;
import java.io.File;
/**
* 本代码重点关注一下内容: 1. 将文件设定为可写 2. 将文件设定为可读 3. 将文件设定为只读
*
* @author louxj424
*
*/
public class SetFileProberity {
public static void main(String[] args) {
File file = new File("src/com/netease/fileoperation/test.file");
if (file.exists()) {
// 将文件设定为可写
file.setWritable(false);
// 将文件设定为可读
file.setReadable(false);
// 将文件设定为只读
file.setReadOnly();
}
}
}
6 遍历文件夹
代码实例:
package com.netease.java_learn.file;
import java.io.File;
/**
* 遍历文件夹Demo
*
* @author louxj424
*
*/
public class FileScanDemo01 {
private static final String FILE_PATH = "src/files";
public static void main(String[] args) {
File file = new File(FILE_PATH);
printFiles(file, 0);
}
/**
* 打印制定目录下所有的子目录及目录下的文件
*
* @param dir
* 目标路径
* @param tab
* 默认缩进符号数
*/
public static void printFiles(File dir, int tab) {
if (dir.isDirectory()) {
File nextFiles[] = dir.listFiles();
for (int i = 0; i < nextFiles.length; i++) {
for (int j = 0; j < tab; j++) {
System.out.print("-");
}
System.out.println(nextFiles[i].getName());
if (nextFiles[i].isDirectory()) {
printFiles(nextFiles[i], tab + 1);
}
}
}
}
}
7 文件的简单读写
代码实例:
package com.netease.fileoperation;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
public class ReadWriteTextFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file =new File("text.txt");
if (file.exists()) {
System.out.println("file exits");
try {
//字节流对象FileInputStream
FileInputStream fis=new FileInputStream(file);
//字符流对象InputStreamReader
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
//缓存读对象BufferedReader
BufferedReader br=new BufferedReader(isr);
String line;
while ((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
isr.close();
fis.close();
}
//处理编码不支持异常
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//处理文件不存在异常
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//处理IO异常
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}