Java中File的使用方法
一、文件基础知识
文件是一种常见的数据源,文件操作包括存储、读取、删除等。
1.绝对路径和相对路径
绝对路径为完整路径:"C:\windows\system\file.txt"
相对路径为当前路径下的子路径:"\workspace\test\Hello.java"
注意大小写保持一致。
2.文件名称
“文件名.后缀名”,后缀名表示文件类型。
值得注意:后缀名只是标示,和实际存储的文件没有必然联系。
二、File类
File的对象可以代表一个具体的文件或者一个文件夹。
1.File对象代表文件路径
//创建一个File类实例 import java.io.File; public class FileDemo{ public static void main(String [] args){ //原始方法 File f = new File(String pathname); //绝对路径(java中\作为转义符号,所以\\代表路径中\) File f1 = new File("d:\\test\\1.txt''); //相对路径 File f2 = new File("1.txt"); //组合路径(父路径,子路径) File f3 = new File("d:\\test\\","1.txt"); } }
2.File类常用方法
- public boolean creatNewFile():创建制定的文件,不能创建文件夹,并且路径必须存在。
- public boolean delete():删除当前文件或者文件夹,文件夹必须为空,非空需先删除全部文件。
- public boolean exists():判断当前文件或文件夹是否存在。
- public String getAbsolutePath():获得当前文件或文件夹的绝对路径。
- public String getName():获得当前文件或文件夹名称。例如c:\test\1.txt,返回1.txt。
- public String getParent():获得当前路径父路径。例如c:\test\1.txt,返回c:\test。
- public boolean isDirectory():判断当前对象是否为目录(文件夹)。
- public boolean isFile():判断当前对象是否为文件。
- public long length():获得文件实际大小,注意返回值为long类型。
- public String[] list():获得当前文件夹下所有文件名和文件夹名称的String类数组,该名称不是绝对路径。
- public File[] listFiles():获得当前文件夹下所有文件和文件夹的File对象数组。
- public boolean mkdirs():创建文件夹,即使父目录不存在也会自动创建。
- public boolean renameTo(File dest):修改文件名,如果当前路径下存在要修改为的文件名,则修改失败。
- public boolean setReadOnly():设置当前文件或文件夹为只读。
3.举一个栗子
两个方法,第一个递归输出目录下所有文件名,第二个递归删除一个路径下所有文件。
import java.io.File; /** *File Class Demo */ public class FileDemo{ public static void main(String [] args){ File f = new File("D:\\test"); printAllFile(f); deleteAllFile(f); } /** *Print all files and folders */ public static void printAllFile(File f){ System.out.println(f.getName()); if(f.isDirectory()){ File [] f1 = f.listFiles(); int len = f1.length; for(int i = 0; i < len; i++){ printAllFile(f1[i]); } } } /** *Delete all files and folders */ public static void deleteAllFile(File f){ //f is file, delete it if(f.isFile()) f.delete(); //f is folder, do recursion else{ File f1[] = f.listFiles(); int len = f1.length; for(int i = 0; i < len; i++){ deleteAllFile(f1[i]); } } //delete present folder f.delete(); } }
三、读取文件
将文件内容转为输入流。使用Scanner处理。可以使用InputStream或FileInputStream。
举一个栗子:
import java.io.* /** *Using FileInputStream */ public class ReadFile1{ public static void main(String [] args){ FileInputStream fis = null; try{ fis = new FileInputStream("e:\\a.txt"); byte[] data = new byte[1024]; int i = 0; int n = fis.read(); while(n != -1){ data[i] = (byte)n; i++; n = fis.read(); } String s = new String(data,0,i); System.out.println(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ fis.close(); }catch(Exception e){ } } }
四、写文件
基本输出流包括OutputStream和Writer两个,区别是OutputStream体系中的类是按照字节写入的,而Writer体系中的类是按照字符写入的。
流程:
- 建立输出流
- 向流中写入数据
- 关闭输入流
举个栗子
import java.io.*; /** *Using FileOutputStream */ public class WriteFile1{ public static void main(String [] args){ String s = "Java Language"; int n = 100; FIleOutputStream fos = null; try{ fos = new FileOutputStream("e:\\out.txt"); byte [] b1 = s.getBytes(); byte [] b2 = "\r\n".getBytes(); byte [] b3 = String.valueOf(n).getBytes(); fos.write(b1); fos.write(b2); fos.write(b3); }catch(Exception e){ e.pritStackTrace(); }finally{ try{ fos.close(); }catch(Exception e){} } } }
写入txt的内容为:
Java Language
100
以上
私货:
4.22 20:40:留待读完Java的文件操作后整理
4.23 13:10:开始整理~文件这边还是挺好玩的
4.23 13:43: 歇一会来写文件流
4.25 23:00: 一个不小心歇到了这时候……