一、概念

java.io.File类:代表文件和目录。 在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。

以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

在eclipse项目开发中,user.dir就是本项目的目录。因此,执行完毕后,在本项目和D盘下都生成了新的文件(如果是eclipse下,一定按F5刷新目录结构才能看到新文件)。如图所示为:本项目目录中新增文件效果

【常用方法】

【代码示例】

【代码1】

 /**
* 测试文件类1
*
*/
package cn.sxt.test; import java.io.File;
import java.math.BigDecimal; public class Test_0328_FileClass {
public static void main(String[] args) {
//1、路径的表示形式 "\"、"/"就是名称分隔符 separator(:分离、分割) 建议使用"/"
String path="F:\\MyEclipse\\WorkSpace\\IO技术\\SongYi.jpg";
// 1-1:"/"的使用,推荐使用
String path1="F:/MyEclipse/WorkSpace/IO技术/SongYi.jpg";
// 1-2:用常量的拼接
String path2="F:"+File.separator+"MyEclipse"+File.separator+"WorkSpace" +File.separator+"IO技术"+File.separator+"SongYi.jpg"; //System.out.println(File.separatorChar);//查看所在平台的分隔符 windows是"\"("\\"的本质是"\") linux是"/"
//System.out.println(path);
//System.out.println(path1);
//System.out.println(path2); //2、构造File对象,表示对硬盘F目录下的SongYi.jpg依托于对象file进行操作 File file=new File(path1);//构造方法之一:里面放置个字符串路径,名称
File file2=new File("F:/MyEclipse/WorkSpace/IO技术/SongYi.jpg");//构造方法之二,构建File对象
File file3=new File("F:/MyEclipse/WorkSpace/IO技术","SongYi.jpg");//前边是父路径(F:/MyEclipse等也算父路径,逗号位置不固定),后边是文件
File file4=new File(new File("F:/MyEclipse/WorkSpace/IO技术"),"SongYi.jpg");//构造方法三:父对象,子路径 System.out.println("文件大小:"+file.length()+"B");//文件的大小(大小是以字节(B)为单位返回的数字,1KB(千字节)=1024B(字节),
// 1B(字节)=8位(bit), 1MB(兆字节)=1024KB(千字节)
//扩展:BigDecimal:大小数操作类,进行四舍五入运算 Decimal:十进制的
BigDecimal big=new BigDecimal( (double)file.length()/1024 );
//参数:(!)被除数(不知道为啥又new一个对象且传入参数1,即让big对象除以1),2:表示小数点保留2位;
// ROUND_HALF_UP:向(距离)最近的一边舍入,向上舍入
System.out.println(big.divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP)+"KB"); //3、相对路径:不存在盘符(D盘F盘等),相对于当前目录(如我在北京,默认说的是地球上中国的北京)
// 绝对路径:存在盘符(详细描述自己的位置,地球中国的北京)
// getPath():获得当前路径(给绝对返回绝对,给相对返回相对) getAbsolutePath():都返回绝对路径
// getParent():将文件前的文件分隔符前边的所有路径返回去
String path4="F:\\MyEclipse\\WorkSpace\\IO技术\\SongYi.jpg"; //绝对路径
File file5=new File(path4);
System.out.println(file5.getAbsolutePath());//绝对路径
System.out.println(file5.getPath());
System.out.println(file5.getParent());
System.out.println(file5.getName());//获取文件名称
System.out.println(file5.getParentFile().getName());//获取上一级目录的名称 File file6=new File("SongYi.jpg");//相对路径:没有盘符,也会默认的完整输出此图片的路径,因为它相对于当前工程去找图片
System.out.println(file6.getAbsolutePath());
System.out.println(file6.getPath());
System.out.println(file6.getParent());//返回为null,因为分隔符前面没有内容 File file7=new File("SongYi2.jpg");//若是文件不存在,也会输出完整路径,但其实并没有此文件.从而说明File对象可构建对象也可构建路径
System.out.println(file7.getAbsolutePath());
} }

【代码2】

 /*
*测试File(文件)类基本用法
*
*/
package cn.sxt.test;
import java.io.*;
import java.util.Date; public class Test_0319_FileClass {
public static void main(String[] args) throws IOException {
//1、路径分隔符 windows系统 用的是"\\" Linux 是"/" 但是Java跨平台. File.separator路径分隔符常量
File f= new File("d:\\a.txt"); //首先手工新建一个名字为a.txt的文件,表示对硬盘d目录下的a.txt文件依托于对象f进行操作
System.out.println(f);
File f2= new File("d:\\c.txt");
//System.out.println("File文件改名:"+f.renameTo(f2));//借助于新对象f2把原来的a.txt文件改名为c.txt 如果目录下没有a.txt则会返回false
//System.out.println(f2); System.out.println("File是否存在:"+f.exists());//exists 存在
System.out.println("File是否是目录:"+f.isDirectory());//directory:号码簿,目录
System.out.println("File是否是文件:"+f.isFile());
System.out.println("File最后修改时间:"+new Date(f.lastModified()));//Modified改良的,修正的
System.out.println("File的大小:"+f.length());
System.out.println("File的文件名:"+f.getName());//获得文件名称
System.out.println("File的目录路径:"+f.getPath());//path:路径 //2、Property:属性 user.dir:用户的当前工作目录(当前这个主类所在的目录) user.home:用户的主目录
System.out.println(System.getProperty("user.dir"));
File f3=new File("cc.txt");//电脑自动创建1个新文件,没有指定目录,则默认在当前主类所在目录下边,刷新后在屏幕左侧"常用类"目录下即可看到
f3.createNewFile();//创建新文件
//f3.delete(); //删除新建的cc.txt文件 //3、创建新的目录 makedirectory:创建目录
File f4=new File("d:/电影/华语/大陆");
boolean flag=f3.mkdir();// mkdir() 若中间任何目录缺失,则创建失败 返回false
System.out.println(flag);
File f5=new File("d:/游戏/手游/王者荣耀");
boolean flag1=f5.mkdirs();//mkdirs() 可以允许目录缺失,电脑自动帮助创建缺失的目录
System.out.println(flag1);
}
}

二、递归遍历目录

【代码1】list()、listFile()  、listRoots()方法的应用

 /**
* 使用递归算法打印文件目录
*
*/
package cn.sxt.test;
import java.io.File;
import java.util.*; import javax.naming.directory.DirContext; public class Test_0319_PrintFileTree {
public static void main(String[] args) {
File file=new File("D:/游戏");//打印 d盘"游戏"目录下边的所有目录及文件
//printFile(file,0);
countLength(file);
System.out.println(length); //1、list() 列出下一级File对象的名称 ,(仅输出此目录的下一级的名称,不往里深究)
String subName[] =file.list();//把"游戏目录下"下的文件和文件夹的名称存在subName数组中
for (String temp : subName) {
System.out.println(temp);
}
System.out.println("-------"); //2、listFile() 列出下一级File对象,不往里深究,输出绝对路径
File subFiles[] =file.listFiles();//把"游戏目录下"下的文件和文件夹的对象存在subFiles数组中去
for (File temp : subFiles) {
System.out.println(temp);//遍历输出
}
System.out.println("-------"); //3、listRoots() 列出所在电脑的所有盘符(仅列出盘符,不管里面的具体文件)
File roots[] =file.listRoots();
for (File temp : roots) {
System.out.println(temp);
} }
//4、列出文件夹下各个文件
public static void printFile(File file,int level) {
for (int i=0; i<level; i++) { //控制层数,显的有层次感 初始值为0 不满足条件不会输出"-"
System.out.print("-"); }
System.out.println(file.getName());
if (file.isDirectory()) { //首先判断是不是目录
File files[]=file.listFiles();//如果是返回输出该目录下的所有文件,把他们放在一个数组中去
for (File temp:files) { //循环遍历数组
printFile(temp,level+1);//递归输出 结束条件:判断一个文件不是目录则循环结束,即已经到了叶子节点
}
} } //5、统计文件夹的大小,而它由一个一个文件构成,所以循环遍历每个文件。
private static long length=0;
public static void countLength(File file) { if (file!=null && file.exists()) {
if (file.isFile()) {//看看传进来的是否是单个文件,若是则计算其大小。 递归头
length=length+file.length();//累加文件的大小 } else {//若不是单个文件,肯定是文件夹,则继续遍历。 递归体
for (File temp : file.listFiles()) {
countLength(temp);
}
} }else {
System.out.println("文件不存在,无法统计!");
}
} }

【代码2】代码1封装下,复习下对私有属性进行操作的set()和get()方法

 /**
*
*/
package cn.sxt.test; import java.io.File; public class Test_0328_PrintFile {
private long length;
private String path; //文件夹路径
private File file;//源文件 private int countFile=0;//统计下文件的个数
private int countDir=-1;//统计下文件夹的个数 ,要统计的是子孙文件夹的个数,但调用方法时会把父文件也给统计进去,所以初值为-1 public Test_0328_PrintFile (String path) {//构造方法 ,对象的初始化,this表示创建好的对象
this.path = path; //表示把传进来的path值赋值给全局变量的path(外边的String path)
this.file = new File(path); //把路径path传到对象文件file进行操作
countLength(this.file);//传对象文件进去到countLength()方法 } public static void main(String[] args) {//主方法 Test_0328_PrintFile printFile=new Test_0328_PrintFile("D:/游戏");
System.out.println("文件夹大小:"+printFile.getLength()+"B \t含有文件的个数:"+printFile.getCountFile()
+"\t含有文件夹的个数:"+printFile.getCountDir()); Test_0328_PrintFile printFile2=new Test_0328_PrintFile("D:/游戏/手游");
System.out.println("文件夹大小:"+printFile2.getLength()+"B \t含有文件的个数:"+printFile2.getCountFile()
+"\t含有文件夹的个数:"+printFile2.getCountDir()); } //统计文件夹的大小
private void countLength(File file) {
if (file!=null && file.exists()) {
if (file.isFile()) {//看看传进来的是否是单个文件,若是则计算其大小。 递归头
length=length+file.length();//累加文件的大小
this.countFile++;
} else {//若不是单个文件,肯定是文件夹,则继续遍历。 递归体
this.countDir++;
for (File temp : file.listFiles()) {
countLength(temp);
}
}
}else {
System.out.println("文件不存在,无法统计!");
}
} //java中 当定义了一个私有的成员变量的时候,如果需要访问或者获取这个变量的时候,就可以编写set或者get方法去调用。
//set()是给属性赋值的,get()是取得属性值的 ;被设置和存取的属性一般是私有
//主要是起到封装的作用,不允许直接对属性操作。 set()和get()不一定同时存在,看程序需求 public long getLength() {
return length;
} public int getCountFile() {
return countFile;
} public int getCountDir() {
return countDir;
} }

[19/03/29-星期五] IO技术_File(文件)类(可操作文件,不能操作其里边内容,位于Java.io 包中)&递归遍历的更多相关文章

  1. C# 操作文件类,文件夹存在判断,创建,文件内容读写。

    此篇文档是老早就放到草稿箱中了,断断续续编辑了几次.结合自己经常用到的对于文件的操作,结合msdn做此文. 1.File 类 --转自msdn 常用方法: 名称 说明 AppendAllLines(S ...

  2. Java:输入输出流 java.io包的层次结构

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  3. Java——IO系统概览

    前言 对程序语言的设计者来说,创建一个好的输入/输出(IO)系统是一项艰难的任务.这艰难主要来自于要涵盖I/O的所有可能性.不仅存在各种I/O源端和想要与之通信的接收端(源端/接收端:文件.控制台和网 ...

  4. java.IO层次体系结构

    在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writer.Reader:一个接口指的是Serializable.掌握了 ...

  5. java IO流 总结

    [-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input  Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...

  6. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  7. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  8. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  9. java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

    java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...

随机推荐

  1. mysql-connector/python使用示例

    1.下载安装connector/python 地址:https://dev.mysql.com/downloads/connector/python/ 下载的版本(mysql-connector-py ...

  2. html--深入理解4种dom对象

    这四个对象是从HTML结构中逐层深入的,分别代表了HTML结构中所有的内容: 1.Document对象 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们 ...

  3. C Primer Plus note8

    error: too few arguments to function 'imax'| 运行上面的代码,产生了下面的错误: 中文翻译是:函数imax()中的参数太少. 查看imax()函数声明,发现 ...

  4. 使用maven搭建Spring MVC

    在maven项目中搭建SpringMvc 1.pom文件 <span style="white-space:pre"> </span><propert ...

  5. 深入理解jQuery插件开发总结(三)

    容器:一个即时执行函数 根本上来说,每个插件的代码是被包含在一个即时执行的函数当中,如下: (function(arg1, arg2) { // 代码 })(arg1, arg2); 即时执行函数,顾 ...

  6. mysql 笔记3

    --建库create database dsdb DEFAULT CHARACTER set utf8 collate utf8_general_ci;/*删除数据库drop DATABASE 数据库 ...

  7. jquery插件一直报错:xx is not a function

    当然像js文件未引用或者js插件使用方法不对这样的解决办法想必大家都已经试过了. 那么在放弃前请最后看一下是不是引用了两个jquery文件. 引用了两个jquery文件! 引用了两个jquery文件! ...

  8. jQuery Callback函数的用法

    在动画100%完成后,调用callback函数 语法如下 $(selector).hide(speed, callback); <!-- html部分 --> <button> ...

  9. MXNet 分布式环境部署

    MXNet 分布式环境部署 1. MxNet 分布式介绍 先忽略吧, 回头在填上去 2. 分布式部署方法 假设有两台主机ip地址分别是xxx.xxx.xxx.114 和 xxx.xxx.xxx.111 ...

  10. 自学git心得-2

    趁着最近还没忙起来,抓紧更新一下学习心得. 现在的情景是,我们已经在本地创建了一个Git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备 ...