javaIO之File类

 

1File类在整个IO包中是唯一一个与文件本身有关的操作类,所谓的与文件本身有关指的是创建、删除文件等操作,

File类的构造

Public File(String pathname):在建立File对象的时候需要指定一个路径

2、创建、删除文件的操作

例:现在想创建一个文件

package com.itheima;

import java.io.File;

public class FileDemo1{

   public static void main(String[]args){

 try{

   File file=new File(“c:\\temp.txt”);//指定要操作的文件路径

   file.createNewFile();//创建一个文件

}catch(Exception e){

  e.printStatckTrace();

}

}

  上面的例子验证了File类中的createNewFile()是创建一个新文件,如果我们想删除一个文件怎么办呢?

  File类中提供了删除文件的方法delete(),不过,在删除文件之前,我们必须判断一下要操作的文件是否存在:exists()

例:如果文件存在,则删除,如果不存在,则创建新的

package com.itheima;

import java.io.File;

public class FileDemo2{

   public static void main(String[]args)throws Exception{

   File file=new File(“c:\\temp.txt”);//指定要操作的文件路径

   //判断要操作的文件是否存在,存在则删除,不存在则创建

   if(file.exists){

  file.delete();//删除文件

}else{

  File.createNewFile();//创建文件

}

}

}

 在创建和删除文件的时候发现会出现延迟的问题,因为java运行机制是运行在JVM上,在java中的最大特点就是可移植性,但是上面的程序有一点小小的问题,在不同的操作系统下,可能编译不通过。因为不同的操作系统中路径的分隔符不太一样

  windows中使用“\

  linux中使用“/

File类为了解决这个问题,定义了一个常量:public static final String separator.所以上面的代码修改如下:

File file=new File(“c:”+File.separator+”temp.txt”);//指定要操作的文件路径

3、文件和文件的判断

  在给定文件的路径上有可能给出的是一个文件,也可能给出的是一个文件夹,怎么判断呢?

public boolean isFile():判断是否是文件

public boolean isDirectory():判断是否是文件夹

例:判断类型

package com.itheima;

import java.io.File;

public class FileDemo3{

   public static void main(String[]args)throws Exception{

  File file1=new File(“c:”+File.separator+”temp.txt”);//指定要操作的文件路径

  File file2=new File(“c:”+File.separator+”testjava”);//指定要操作的文件路径

  System.out.println(file1.isFile());//如果是文件则打印true,否则false

  System.out.println(file2.isDirectory());//如果是文件夹则打印true,否则false

}

}

4、列出文件夹中的所有内容

列出内容:public String[]list();

列出内容:public File[]listFiles()

例:使用list()方法

package com.heima.io;

import java.io.File;

public class FileDemo4 {

public static void main(String[] args) {

//指定要操作的文件路径

File file =new File("d:"+File.separator+"aa ");if(file.isDirectory()){//如果是文件夹,则列出内容

String[]list=file.list();//列出全部的内容

for(int i=0;i<list.length;i++){//把所有的内容都打印出来

System.out.println(list[i]);

}

}

}

}

运行结果:

例:使用listFiles()完成列表

package com.heima.io;

import java.io.File;

public class FileDemo5 {

public static void main(String[] args) {

File file =new File("d:"+File.separator+"aa");//指定要操作的文件路径

if(file.isDirectory()){//如果是文件夹,则列出内容

File[]list=file.listFiles();//列出全部的内容

for(int i=0;i<list.length;i++){//把所有的内容都打印出来

System.out.println(list[i]);

}

}

}

}

运行结果:

从上面的两个事例中可以发现两个方法的区别。

思考:现在要求输出一个给定目录中的全部文件的路径。

上面的两个事例只能输出一级文件目录的所有文件或文件夹的路径,对于更深层的文件或文件夹则无法输出,要实现这个问题需要用到递归了。

package com.heima.io;

import java.io.File;

public class FileDemo4 {

public static void main(String[] args) {

File file =new File("d:"+File.separator+"aa");//指定要操作的文件路径

list(file);//调用list()方法列出所有文件的路径

}

public static void list(File file){

if(file!=null){//判断对象是否为空

if(file.isDirectory()){//如果是文件夹,则继续输出

File f[]=file.listFiles();

if(f!=null){//文件夹的内容已经列出

for(int i=0;i<f.length;i++){

list(f[i]);//通过递归继续列出每一个内容。

}

}

}

}else{//如果是文件,则直接输出

System.out.println(file);

}

}

}

问题:怎样删除带内容的目录

  原理:在window中删除目录从里面往外删除,需要用到递归了

package com.itheima.file;

import java.io.File;

public class FileDemo2 {

public static void main(String[] args)throws Exception {

//创建一个File对象

File file=new File("d:"+File.separator+"aaa");

remove(file);//调用remove方法删除指定的内容

}

public static void remove(File file){

//列出aa中的所有内容

try{

//列出目录中的所有内容

File[]files=file.listFiles();

//遍历目录中的所有内容

for(File file1:files){

//判断是否是目录,如果是,利用递归继续查找

if(file1.isDirectory()){

remove(file1);

}else{

//如果是文件直接删除

System.out.println(file1+"::被删除"+file1.delete());

}

}

//然后删除空目录

System.out.println(file+"::被删除"+file.delete());

}catch(Exception e){

System.out.println("此文件夹不存在");

}

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值