文件处理是最常见的I/O处理。在实际的编程中不可避免的用到。Java的文件操作涉及的类其实也不多,好好总结一下,感觉也不难。
A)File类
欲对文件进行操作首先需要知道文件的有关信息,如文件的名称、路径、属性等。Java中通过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为文件或目录 |
方法 | 描述 |
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
主要用来处理二进制文件的读取工作。
构造方法 | 描述 |
public FileInputStream(String name) | 以name为文件名创建FileInputStream对象 |
public FileInputStream(File file) | 以file为文件名创建FileInputStream对象 |
b)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(); } }