文件处理是最常见的I/O处理。在实际的编程中不可避免的用到。Java的文件操作涉及的类其实也不多,好好总结一下,感觉也不难。
A)File类
欲对文件进行操作首先需要知道文件的有关信息,如文件的名称、路径、属性等。Java中通过File类来提供所有这些。File类提供了一种与机器无关的方式来描述一个文件的信息。每个File类对象表示一个磁盘文件或目录。
File类常用构造方法
构造方法 | 描述 |
public File(String path) | 用path参数创建File对象所对应的磁盘文件或目录 |
public File(String path,String name) | 以path为路径,以name为文件或目录名创建File对象 |
public File(File dir,String name) | 以dir为目录,以name为文件或目录 |
File类常用方法
方法 | 描述 |
public String getName() | 获取文件名或目录 |
public String AbsolutePath() | 获取文件或目录的绝对路径 |
public String getParent() | 获取文件或目录的上一级目录 |
public boolean canWrite() | 测试文件是否可写 |
public boolean isDirectory() | 测试当前File对象是否为目录 |
public String renameTo(File newName) | 文件改名 |
public boolean mkdir() | 创建单级目录 |
public String[] list() | 获取当前目录下的所有文件或目录 |
B)FileInputStream类和FileOutputStream类
FileInputStream类和FileOutputStream类 分别继承自InputStream、OutputStream,它们重写或实现了父类中的所有有方法,因此在此节中不再介绍它们的常用方法请参见笔者此篇:http://www.cnblogs.com/byirain/archive/2013/03/03/2937814.html
a) FileInputStream
主要用来处理二进制文件的读取工作。
FileInputStream类的常用构造方法
构造方法 | 描述 |
public FileInputStream(String name) | 以name为文件名创建FileInputStream对象 |
public FileInputStream(File file) | 以file为文件名创建FileInputStream对象 |
b)FileOutputStream
主要用来处理二进制文件的写入工作。
FileOutputStream类的常用构造方法
public FileOutputStream(String name) | 以name为文件名创建 |
public FileOutputStream(String name,boolean a) | 同上,但若a为true,则数据追加在原数据之后 |
public FileOutputStream(File file) | 以file为文件名创建 |
C)FileReader类和FileWriter类
FileReader类和FileWriter类与FileInputStream类和FileOutputStream类相似,不同之处在于前者处理的单位为字符(char)后者为字节(byte),在此不再赘述。
D)文件常用操作
费话不说,请看源码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFile {
/**
*
* @param path
* 创建的目录名,绝对路径
*/
public static File CreateDir(String path) {
File fileDir = new File(path);
if (!fileDir.exists()) {
fileDir.mkdirs();
return fileDir;
}
System.out.println("目录已存在");
return fileDir;
}
/**
*
* @param path
* 绝对路径名
* @param name
* 文件名
* @return 文件对象
*/
public static File CreateFile(String path, String name) {
CreateDir(path);
File file = new File(path + File.separator + name);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
System.out.println("文件已存在");
return file;
}
/**
*
* @param path
* 绝对路径名
* @param name
* 文件名
* @return 是否删除成功
*/
public static boolean DelFile(String path, String name) {
File file = new File(path + File.separator + name);
if (file.exists()) {
file.delete();
return true;
}
System.out.println("文件不存在");
return false;
}
/**
*
* @param fromFile
* 源文件
* @param toFilePath
* 目的文件路径
* @param toFileName
* 目的文件名
* @throws IOException
*/
public static void copyFile(String fromFile, String toFilePath,
String toFileName) throws IOException {
File Ffile = new File(fromFile);
if (!Ffile.exists()) {
System.err.println("源文件不存在");
return;
}
// 建立目的文件
File Tfile = CreateFile(toFilePath, toFileName);
//利用FileInputStream 与 FileOutputStream完成文件copy
FileInputStream fin = new FileInputStream(Ffile);
byte[] b = new byte[fin.available()];
fin.read(b);
FileOutputStream fout = new FileOutputStream(Tfile);
fout.write(b);
System.out.println("copy finished!");
fin.close();
fout.close();
}
}