------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、File概述
File的英文释义是文件,顾名思义,File即是用于描述文件对象的一个包装类,封装了各种操作文件或者文件夹的方法供开发人员使用。
二、File类的常用方法
File file = new File("C:\\hahaha.txt");//关联文件,把文件封装成对象
//创建文件
file.creatNewFile();//创建文件实体
file.mkdir();//创建文件夹实体
file.mkdirs();//创建多级目录文件夹实体
//删除文件
file.delete();
file.deleteOnExit();//程序结束时删除文件
//判断文件
file.exists(); //文件是否存在
file.isDirectory();//文件是否为文件夹
file.isFile(); //文件是否为文件
file.isHidden()
file.isAbsolute()
canExecute() //是否可以执行
canRead()
canWrite()
//获取文件信息
file.length();
file.listFiles();//当file为目录文件夹时
file.getName()
file.getParent();
file.getPath();
file.getAbsolutePath();//long
file.lastModified() //返回文件最后一次被修改的时间 long
file.renameTo()
//文件列表
File.listRoots() //静态方法,返回File[] files,根盘符数组
File f = new File("c:\\");
f.list() //返回的是File的名称,字符串。当f不是文件夹时返回null。
f.list(FilenameFilter f) //返回所有限定条件的文件名,字符串。
f.listFiles() //返回的是File[] ,具体对象。
三、练习题
1列出E盘下某文件夹内的所有jtxt文件到控制台
package com.itheima;
import java.io.File;
import java.io.FilenameFilter;
class Demo{
public static void main(String[] args){
File f = new File("e:\\");//将文件夹封装成对象
String[] str = f.list(new FilenameFilter(){ //调用带过滤器的list方法
public boolean accept(File f,String s){
return s.endsWith(".txt");
}
});
for(int x=0;x<str.length;x++){ //将得到的文件名打印在控制台
System.out.println(str[x]);
}
}
}
2列出一个目录下的所有内容,包括子目录的内容(带层次),到控制台。
package com.itheima;
import java.io.File;
class Demo{
public static void main(String[] args){
File dir =new File("e:\\360yasuo");
showDir(dir,0);
}
//封装一个分级展示目录内容的方法
public static void showDir(File dir,int level){
System.out.println(method(level)+dir.getName());
level++;
File[] files=dir.listFiles();
for(int x=0;x<files.length;x++){
if(files[x].isDirectory())//如果目录下有文件夹,则递归,继续列出文件夹下的内容
showDir(files[x],level);
else{ //如果遍历到的是文件,则直接打印到输出台。
System.out.println(method(level)+files[x].getName());
}
}
}
//封装一个用于分级的方法,分级的本质就是在字符串前面加空格
public static String method(int level){
StringBuilder sb = new StringBuilder();
for(int x=0;x<level;x++){
sb.append(" ");
}
return sb.toString();
}
}
3删除带内容的目录
/*
* 需求:删除e盘下1234文件夹及其所有内容
*/
package com.itheima;
import java.io.File;
class Demo{
public static void main(String[] args){
//把目标文件夹封装成对象
File dir = new File("e:\\3234");
//对该文件夹进行删除操作
deleDir(dir);
}
//封装一个用于删除文件夹及其内容的方法
public static void deleDir(File dir){
File[] files=dir.listFiles();
for(int x=0;x<files.length;x++){ // 遍历文件夹中的内容
if(files[x].isDirectory()) //如果是文件夹,则递归,继续删除操作
deleDir(files[x]);
else{ //如果是文件,则直接删除
files[x].delete();
}
}
dir.delete(); //将空的目标文件删除
}
}
4将指定目录下的所有文件的绝对路径名,存到一个文本文件中
/*
* 需求:将e盘下1234文件夹的所有文件的绝对路径名,存到一个文本文件中
* 思路:
* 1.把1234文件夹封装成一个File对象
* 2.利用file对象的操作方法得到绝对路径名
* 3.利用输出流将路径名存到文本文件中
*/
package com.itheima;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Demo{
public static void main(String[] args){
//定义一个输出流对象缓冲区,提高数据传输效率
BufferedWriter bufw =null;
try
{
//定义输出流对象并关联到文本文件
bufw =new BufferedWriter(new FileWriter("e:\\456.txt"));
File dir =new File("e:\\1234");//把1234文件夹封装成对象
File[] files=dir.listFiles();
for(int x=0;x<files.length;x++){//遍历1234文件夹的内容
String s =files[x].getAbsolutePath();
bufw.write(s); //将遍历到的文件的绝对路径写入文本文件
bufw.newLine();
bufw.flush();
}
}
catch(IOException e)
{
throw new RuntimeException("生成文件失败");
}
finally //关闭输出流
{
try{
if(bufw!=null)
bufw.close();
}
catch(IOException e){
throw new RuntimeException("输出流关闭失败");
}
}
}
}
四、存取配置文件
创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。
/*
* 需求:创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。
* 思路:
* 1.在硬盘上创建一个文件用于记录信息
* 2.创建输入流和输出流用于在内存和配置文件之间传递数据
* 3.创建properties集合,读取配置文件信息
* 4.在prop内更改信息并将更改后的结果保存到配置文件
*/
package com.itheima;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.Properties;
class Demo{
public static void main(String[] args)throws Exception{
//将配置文件封装成对象
File f =new File("e:\\count.properties");
if(!f.exists())
f.createNewFile();
FileInputStream fis = new FileInputStream(f);//创建一个输入流,用于读取配置文件
Properties prop = new Properties();//定义一个集合,用于处理更改配置文件的信息
prop.load(fis);//将配置文件的信息通过流加载进内存
int count = 0;
String value = prop.getProperty("times");
if(value!=null)
count = Integer.parseInt(value);
if(count>=5)
System.out.println("试用次数已到,请注册缴费");
count++;
prop.setProperty("times", count+"");//每用一次,在内存中更改使用次数
FileWriter fw = new FileWriter(f);
prop.store(fw, "");//将更改后的使用次数保存到配置文件
fw.close();//关闭流
}
}
五、printWriter和printStream
打印流,输出流的一种,强大之处在于提供了println方法,能将各种数据原样打印出来。。。System.out中的out就是printStream的类对象。
printStream构造函数可以接收的参数类型:File对象,字符串路径,字节输出流。
printWriter构造函数可以接收的参数类型:File对象,字符串路径,字节输出流,字符输出流。
六、合并文件和切割文件
/*
* 需求:将e盘下的txt文件合并到一个文本文件中
* 思路:
* 1.利用SequenceInputStream合并输入流
* 2.创建一个输出流,将数据写到指定文本文件中
*/
package com.itheima;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
class Demo{
public static void main(String[] args)throws IOException{
//创建集合vector ,用于生成Enumeration参数
Vector v = new Vector();
v.add(new FileInputStream("e:\\1.txt"));
v.add(new FileInputStream("e:\\2.txt"));
v.add(new FileInputStream("e:\\3.txt"));
Enumeration e = v.elements();
//将三个输入流合成一个流
SequenceInputStream sis = new SequenceInputStream(e);
BufferedInputStream bufis =new BufferedInputStream(sis);
//创建一个输出流,用于往目的存储数据
FileOutputStream fos = new FileOutputStream("e:\\4.txt");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
int by = 0;
while((by=sis.read())!=-1){//循环读取和写入,完成存储
bufos.write(by);
}
//关闭流
sis.close();
bufos.close();
}
}
/*
* 需求:将e盘下的1.jpg文件切割成三部分
* 思路:
* 1.创建一个字节读取流,用于读取文件数据
* 2.每读取一部分就放到byte[]中,此时再创建输出流并把数据写入文件
*/
package com.itheima;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class Demo{
public static void main(String[] args)throws IOException{
//创建字节输入流,并关联到文件
FileInputStream fis= new FileInputStream("e:\\1.jpg");
BufferedInputStream bufis = new BufferedInputStream(fis);
//定义缓冲区字节数组
byte[] buf = new byte[1024*512];
int len =0;
int count =1;
while((len=bufis.read(buf))!=-1){ //循环读取源文件
//输入流每装满一次缓冲区,就创建一个输出流来接收缓冲区数据
FileOutputStream fos = new FileOutputStream("e:\\"+(count++)+".part");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
bufos.write(buf, 0, len);
bufos.close();
}
//关闭读取源文件的输入流
bufis.close();
}
}