Java IO流中的File类学习总结
一、File类概述
File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类有多种重载的构造方法。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的相对路径和绝对路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。File类操作文件的重要性有:
a:如何跨平台问题
b:文件编码问题,尤其是多语言平台情况下如何正常工作。
c:文件读写效率、操作效率
d:文件加密和文件安全
e:文件快速检索,强烈建议使用lence进行文件检索及文件管理。
二、File类的对象功能
1.创建和删除的操作
(1).创建文件
当我们创建文件时,先要产生File类的对象,可以通过File类的各种构造方法来获取该对象,然后在创建文件的时候,我们要先判断要创建的文件是否已存在,如果不存在,则创建,否则不创建,File类的构造方法有:
File(String pathName) 传递一个文本路径来创建对象
File(URI fileUri) 传递一个URI来创建对象
File(File fileDir,String fileName)
File(String,File)
File(String,int)
File(String filePath,String fileName)
下面演示一个创建文件的方法:
1 /***
2 * 创建文件的方法
3 * @param fileName
4 */
5 public static void creatFile(String fileName){
6 File file=new File(fileName);
7 if(!file.exists())//判断文件是否存在
8 {
9 try{
10
11 new File(file.getParent()).mkdirs();//建立上层文件夹
12 file.createNewFile();//创建文件,执行此语句才产生该文件
13
14 }
15 catch(IOException e){
16
17 e.printStackTrace();
18
19 }
20 }
21 else{
22
23 System.out.println("文件已存在");
24
25 }
26 //获取文件名
27 String filename=file.getName();
28 //获取文件路径
29 String filePath=file.getPath();
30 //获取文件绝对路径
31 String fileAbsolutePath=file.getAbsolutePath();
32 //获取父亲文件路径
33 String parentPath=file.getParent();
34 //获取父亲文件名
35 String parentName=new File(file.getParent()).getName();
36 //获取文件大小
37 long size=file.length();
38 //获取最后一次修改时间
39 long lastTime=file.lastModified();
40 String filemsg="文件名:"+filename+"\n路径:"+filePath+"\n绝对路径: "+fileAbsolutePath+"\n父文件路径:"+parentPath;
41 filemsg+="\n文件大小"+size+"\n最后修改时间:"+new Timestamp(lastTime);
42 System.out.println(filemsg);
43 System.out.println("父亲节点文件夹名称"+parentName);
44 }
45
46 public static void main(String args[]){
47 creatFile("E:\\Mytest.txt");
48 }
运行结果如下:
文件已存在
文件名:Mytest.txt
路径:E:\Mytest.txt
绝对路径: E:\Mytest.txt
父文件路径:E:\
文件大小0
最后修改时间:2014-06-04 19:51:26.846
(2).移动文件
在某些情况下我们需要讲一个文件从某个地方移到另一个地方,并且对他重命名,这时我们可以使用File对象的renameTo(File toFile)方法来轻松实现,实现代码如下:
1 /**修改文件路径及名称,内容也一块移动过去了,相当于“移动”
2 *
3 *@param fromPath
4 *@param toPath
5 **/
6 public static void refileName(String fromPath,String toPath){
7 File file1=new File(fromPath);
8 File file2=new File(toPath);
9 //判断file2路径是否存在,不存在则创建
10 if(!file2.exists()){
11
12 new File(file2.getParent()).mkdirs();
13
14 }
15 file1.renameTo(file2);
16 //修改文件名称及路径
17 System.out.println(fromPath+"文件已移动及重命名到"+toPath);
18
19 }
20
21 public static void main(String args[]){
22 refileName("E:\\Mytest.txt","F:\\test.txt");
23 }
(3).文件复制
文件复制可以利用FileInputStream(File formFile)和FileOutputStream(File toFile)将一个文件复制到目的地,具体代码如下:
1 /**复制一个文件 *
2 * @param src
3 * @param des
4 * */
5 public static void copyFile(String src, String des)
6 {
7 File file1 = new File(src);
8 File fileDir=new File(des);//产生文件的上层文件夹对象
9 String topath = des + "\\" + file1.getName();
10 File file2 = new File(topath);//产生文件对象
11 if(!file1.exists()){
12
13 System.out.print("原文件不存在!");
14 }
15 if(!fileDir.exists()){
16
17 fileDir.mkdirs();//创建文件夹
18
19 }
20 if(file2.exists()) {
21
22 file2.delete();//目标位置有该文件,则删除
23
24 }
25 try{
26
27 InputStream inStream = new FileInputStream(file1); // 读入原文件
28
29 FileOutputStream fs = new FileOutputStream (file2);
30
31 byte[] buffer = new byte[4098];
32
33 int byteread=0;
34
35 while ((byteread = inStream.read(buffer)) != -1)
36 {
37 fs.write(buffer, 0, byteread);
38
39 }
40 inStream.close();
41 fs.close();
42 System.out.println("文件复制成功,新路径为"+topath);
43
44 }
45 catch(IOException e)
46 {
47 e.printStackTrace();
48 }
49 }
50
51 public static void main(String args[]){
52 copyFile("F:\\test.txt","E:\\");
53 }
(4).遍历文件夹中的文件
在遍历文件夹中的文件时,要用到递归的思想,其次要考虑当File对像还是文件夹时,继续递归,否则,打印文件文件名到控制台。利用File对象的listFiles()方法获得该路径下的文件或文件夹,然后递归。代码如下:
1 /**
2 * 遍历一个文件夹下的文件,并显示文件名称
3 * @param path
4 * */
5 public static void searchFile(String path)
6 {
7 File file=new File(path);
8 File[] files=file.listFiles();//file下的文件或文件夹
9 System.out.println(path+"目录下的文件数有"+files.length);
10 for(File f:files)
11 {
12 if(f.isFile())
13 {
14 System.out.println(f.getName());
15 }
16 else if(f.isDirectory())
17 {
18 searchFile(f.getPath());//递归
19 }
20 }
21 }
22
23
24 public static void main(String args[]){
25 searchFile("F:\\服务");
26 }
(5).复制文件夹或文件
复制一个目录中的所有文件,这个目录有可能是文件夹,所以要用到递归思想,代码如下:
1 /**复制一个文件 *
2 * @param src
3 * @param des
4 * */
5 public static void copyFile(String src, String des)
6 {
7 File file1 = new File(src);
8 File fileDir=new File(des);//产生文件的上层文件夹对象
9 String topath = des + "\\" + file1.getName();
10 File file2 = new File(topath);//产生文件对象
11 if(!file1.exists()){
12
13 System.out.print("原文件不存在!");
14 }
15 if(!fileDir.exists()){
16
17 fileDir.mkdirs();//创建文件夹
18
19 }
20 if(file2.exists()) {
21
22 file2.delete();//目标位置有该文件,则删除
23
24 }
25 try{
26
27 InputStream inStream = new FileInputStream(file1); // 读入原文件
28
29 FileOutputStream fs = new FileOutputStream (file2);
30
31 byte[] buffer = new byte[4098];
32
33 int byteread=0;
34
35 while ((byteread = inStream.read(buffer)) != -1)
36 {
37 fs.write(buffer, 0, byteread);
38
39 }
40 inStream.close();
41 fs.close();
42 System.out.println("文件复制成功,新路径为"+topath);
43
44 }
45 catch(IOException e)
46 {
47 e.printStackTrace();
48 }
49 }
50
51 /**
52 * 复制一个文件夹,从src拷贝到des,src里面可能是文件夹或文件。
53 * @param src
54 * @param des
55 * */
56 public static void copyDir(String src,String des)
57 {
58 File file1=new File(src);
59 File file2=new File(des);
60 if(!file2.exists())
61 {
62 file2.mkdirs();
63 }
64 File[] files=file1.listFiles();
65 for(File f:files)
66 {
67 if(f.isFile())
68 {
69 copyFile(f.getPath(),des+"\\"+new File(f.getParent()).getName());//注意,目标路径要加上这一层文件夹的名称,作为下次调用的新目标路径
70
71 }
72 else if(f.isDirectory())
73 {
74 copyDir(f.getPath(),des+"\\"+new File(f.getParent()).getName());//递归
75 }
76 }
77 }
78
79
80 public static void main(String args[]){
81 copyDir("F:\\服务","e:\\服务");
82 }
(6).删除某个目录下的文件和文件夹
如果该目录是文件则直接删除,否则利用递归思想,首先利用File对象的listFiles()方法获得所有文件或文件夹,然后利用for(Object o: Objects)来遍历其中的对象,判断该对象是否为文件,如果是文件则删除,否则继续递归。当把所有的文件删除后还要删除该文件夹,注意不要重复误删除。代码如下:
/**
* 删除某个目录下的文件和文件夹,也包括该目录
* @param src
* @param des
* */
public static void deleteDir(String srcDir)
{
File file1=new File(srcDir); if(!file1.exists())
{
System.out.print(srcDir+" 目录不存在!");
return;
} if(file1.isFile()){
if(file1.delete()){
System.out.println("文件--"+file1.getAbsolutePath()+"删除成功");
}else{
System.out.println("文件--"+file1.getAbsolutePath()+"删除失败");
}
return;
} File[] files=file1.listFiles();
for(File f:files)
{
if(f.isFile())
{
if(f.delete()){
System.out.println("文件--"+f.getAbsolutePath()+"删除成功");
}else{
System.out.println("文件--"+f.getAbsolutePath()+"删除失败");
} }
else
{
deleteDir(f.getPath());//递归
}
} if(file1.delete()){
System.out.println("文件夹--"+file1.getAbsolutePath()+"删除成功");
}else{
System.out.println("文件夹--"+file1.getAbsolutePath()+"删除失败");
}
} public static void main(String args[]){
deleteDir("E:\\dd");
}
Java IO流中的File类学习总结的更多相关文章
- Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)
1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...
- 用IO流中的File类来创建文件及目录
题目如下: 设计一个命令窗口程序,要求按照如下的格式显示 例如:===利用命令窗口完成文件的操作===(1)创建目录 (2)创建文件 (3)删除目录 (4)删除文件 ===现在正在做创建目录的操作== ...
- Java基础-IO流对象之File类
Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
- Java IO流中 File文件对象与Properties类(四)
File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...
- 总结JAVA----IO流中的File类
对于IO流中File类的总结 File类的基本概念 File类只能用于完成对于文件属性(是否存在.可读性.长度)的一些操作,不能用于文件的访问. File类的对象 File类的对象存储的是文件的绝对路 ...
- JAVA IO分析一:File类、字节流、字符流、字节字符转换流
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- Java 基础(三)| IO流之使用 File 类的正确姿势
为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 File 类? java ...
- java IO流技术 之 File
IO流技术 概念:input - output 输入输出流: 输入:将文件读到内存中: 输出:将文件从内存中写出到其他地方 作用:主要就是解决设备和设备之间的数据传输问题. File :文件类的使用十 ...
随机推荐
- android从应用到驱动之—camera(2)---cameraHAL的实现
本文是camera系列博客,上一篇是: android从应用到驱动之-camera(1)---程序调用流程 本来想用这一篇博客把cameraHAL的实现和流程都给写完的.搞了半天,东西实在是太多了.这 ...
- Zend Studio的配置和使用
或许你可以用Dreamweaver.Notepad++或者Editplus这样的东西完成你的系统,但所谓“工欲善其事,必先利其器”,偶认为一个给力的IDE对于新手还是很必要的,而Zend作为PHPer ...
- C# WinForm窗体 控件Control 的 Invalidate、Update、Refresh的区别
Control.Refresh - does an Control.Invalidate followed by Control.Update.Refresh: 强制控件使其工作区无效并立即重绘自己和 ...
- Android下 ionic view 无法登录
ionic view一个超棒工具,它是测试 ionic 框架搭建项目的app软件. 在它的官网有iphone 和 android 版本的下载地址.但是,这里只有在 google play 里面才有,而 ...
- FileZilla无法确定拖放操作的目标,由于shell未正确安装
天有不测风云,突然间,用filezilla下载ftp上的文件到桌面的时候,提示"无法确定拖放操作目标.由于shell未正确安装" 解决办法很简单,执行如下几步就OK了 1.在CMD ...
- Zxing 扫二维码
1 http://blog.csdn.net/xiaanming/article/details/10163203 2 我会把一个可以运行的Demo云盘:http://pan.baidu.com/s/ ...
- tomcat 默认项目设置
正常情况下,我们启动tomcat后,直接输入“http://localhost:端口/“ 后,默认访问道是webapp目录下的ROOT应用. 我们要通过上述方式访问自己的应用,有俩种方式. 第一:把自 ...
- POJ 3177 Redundant Paths (桥,边双连通分量,有重边)
题意:给一个无向图,问需要补多少条边才可以让整个图变成[边双连通图],即任意两个点对之间的一条路径全垮掉,这两个点对仍可以通过其他路径而互通. 思路:POJ 3352的升级版,听说这个图会给重边.先看 ...
- php.ini配置中文详解
;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ...
- Window 下 VFW 视频采集与显示
引言 经过几天的努力终于将VFW视频采集与显示功能完整实现了,不得不说网上对这方面完整的详细讲解文章是在太少了.所以就要本人来好好总结一下让后来者不再像我一样折腾好久.在本文中我将详细讲解VFW视频采 ...