一、文件基础知识
文件是一种常见的数据源,文件操作包括存储、读取、删除等。
1.绝对路径和相对路径
绝对路径为完整路径:"C:\windows\system\file.txt"
相对路径为当前路径下的子路径:"\workspace\test\Hello.java"
注意大小写保持一致。
2.文件名称
“文件名.后缀名”,后缀名表示文件类型。
值得注意:后缀名只是标示,和实际存储的文件没有必然联系。
二、File类
File的对象可以代表一个具体的文件或者一个文件夹。
1.File对象代表文件路径
//创建一个File类实例
importjava.io.File;public classFileDemo{public static voidmain(String [] args){//原始方法
File f = newFile(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.举一个栗子
两个方法,第一个递归输出目录下所有文件名,第二个递归删除一个路径下所有文件。
importjava.io.File;/***File Class Demo*/
public classFileDemo{public static voidmain(String [] args){
File f= new File("D:\\test");
printAllFile(f);
deleteAllFile(f);
}/***Print all files and folders*/
public static voidprintAllFile(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 voiddeleteAllFile(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 classReadFile1{public static voidmain(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 classWriteFile1{public static voidmain(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: 一个不小心歇到了这时候……