JAVA基础知识之IO-File类

File类介绍

File是java.io包下面的一个类,代表与平台无关的文件或者目录。JAVA中,无论文件还是目录,都可以看作File类的一个对象。File类能对文件或目录新建,删除,获取属性等操作,但是不能直接操作文件内容(文件内容需要用数据流访问)。

JVM默认会将workspace作为相对路径,即user.dir系统变量所指路径, 即如果这样初始化file对象,File file = new File("."); 就是获取了user.dir路径。

File类的常用方法

String getName() -如果file对象是一个文件,则返回文件名,如果是路径,则返回路径的最后一级

File getAbsoluteFile() -返回绝对路径

String getParent() -返回file对象所在目录的父目录

File类检查文件

exists()-文件或目录是否存在

canRead()-是否可读

isFile()-是否是文件

isDirectory()-是否是目录

File类获取文件属性

long lastModified() -最后修改时间

long length() -文件长度

File类进行文件操作

createFile() -成功true,失败false

delete()

mkdir() -创建目录 ,file对象必须对应一个路径

String[] list() - 如果file对象是一个路径,list()将返回一个数组,如果路径下没有文件和子目录,则数组为empty;如果file对象是一个文件,或者file路径不存在,或者发生IO错误,则list()返回null

File[] listFiles() -同上,只不过返回的是File类型数组

文件过滤器FilenameFilter接口

如果FilenameFilter作为file.list()的参数传入,实现FilenameFilter接口的accept方法,可以实现文件过滤。

accept方法有两个参数,dir和name,通常可以对name做条件过滤。

下面是File类的综合演示,

 1 package io;
 2
 3 import java.io.File;
 4 import java.io.FilenameFilter;
 5 import java.io.IOException;
 6
 7 public class FileTest {
 8     public static void main(String[] args) throws IOException {
 9         //JVM默认会将workspace作为相对路径,即user.dir系统变量所指路径
10         File file = new File(".");
11         File file2 = new File("C:/PROJECT/JavaBasic/PROJECT_JavaBasic/tmp.txt");
12         File file3 = new File("./tmp.txt");
13         //如果file对象是一个文件,则返回文件名,如果是路径,则返回路径的最后一级
14         System.out.println(file.getName());
15         //当file为相对路径时,获取父路径可能会出错
16         file3.delete();
17         System.out.println("父路径:"+file3.getParent());
18         //获取绝对路径
19         System.out.println(file.getAbsoluteFile());
20         //getAbsoluteFile返回的是File类型, getAbsolutePath则返回String类型
21         System.out.println(file.getAbsoluteFile().getParent());
22         //在当前路径下创建一个临时文件,第三个参数必须是路径,否则会报错
23         File tmpFile = File.createTempFile("aaa", ".txt", file);
24         //JVM退出时删除该文件
25         tmpFile.deleteOnExit();
26         //以系统时间作为名称创建文件
27         File newFile = new File(System.currentTimeMillis()+"");
28         System.out.println("newFile是否存在:"+newFile.exists());
29         //以指定file对象来创建文件
30         newFile.createNewFile();
31         System.out.println("newFile是否存是文件:"+newFile.isFile());
32         System.out.println("newFile是否存是目录:"+newFile.isDirectory());
33         System.out.println("以newFile对象创建目录是否成功:"+newFile.mkdir());
34         //如果file对象是一个路径,list()将返回一个数组,如果路径下没有文件和子目录,则数组为empty
35         //如果file对象是一个文件,或者file路径不存在,或者发生IO错误,则list()返回null
36         String[] fileList = file.list();
37         System.out.println("====当前路径下的所有文件和目录如下====");
38         for (String fileName : fileList) {
39             System.out.println(fileName);
40         }
41         //listRoots静态方法列出所有磁盘根路径
42         File[] roots = File.listRoots();
43         System.out.println("====系统所有磁盘根路径如下====");
44         for (File root : roots) {
45             System.out.println(root);
46         }
47
48         String[] nameList = file.list(new FilenameFilter() {
49             @Override
50             public boolean accept(File dir, String name) {
51                 // TODO Auto-generated method stub
52                 return name.endsWith(".txt") || new File(name).isDirectory();
53             }
54         });
55         System.out.println("====过滤条件后如下====");
56         for (String filterName :  nameList) {
57             System.out.println(filterName);
58         }
59
60     }
61 }

输出结果如下,

 1 .
 2 父路径:.
 3 C:\PROJECT\JavaBasic\PROJECT_JavaBasic\.
 4 C:\PROJECT\JavaBasic\PROJECT_JavaBasic
 5 newFile是否存在:false
 6 newFile是否存是文件:true
 7 newFile是否存是目录:false
 8 以newFile对象创建目录是否成功:false
 9 ====当前路径下的所有文件和目录如下====
10 .classpath
11 .project
12 .settings
13 1480521332106
14 1480521357843
15 1480521378187
16 1480522448612
17 1480522471511
18 1480522477413
19 1480522484941
20 1480522505253
21 aaa2174524463556527449.txt
22 bin
23 src
24 ====系统所有磁盘根路径如下====
25 C:26 D:27 E:28 F:29 ====过滤条件后如下====
30 .settings
31 aaa2174524463556527449.txt
32 bin
33 src
时间: 2024-08-14 18:43:03

JAVA基础知识之IO-File类的相关文章

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:"+File.separator+"demodir

java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFilter filter)或者public File[] listFiles(FileFilter filter)方法,把FilenameFilter或者FileFilter接口对象作为参数传入,通过实现接口里面的 boolean accept(File dir, String name) 或者boo

java基础知识回顾之javaIO类--File类

File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读,获取当前文件的路径名,判断指定文件是否存在,获得当前文件的列表,创建.删除文件目录等方法. /**     * 构造方法:File f = new File("file.txt");//file.txt 相对路径     *       File f1 = new File("c

java基础知识回顾之javaIO类--File类应用:删除带内容的目录

/** * 深度删除一个带内容的目录 * 原理:必须从里往外删除,需要深度遍历 * @author Administrator * */ public class FileDeleteList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:\\复件 demodir"); removedir(

java基础知识回顾之javaIO类--RandomAccessFile类

java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素.4.其实该对象就是将字节输入流和输出流进行了封装.5.该对象只能对文件操作,目的和源只能是文件对象.通过看构造方法可以看得出来.RandomAccessFile(File file, String mode) RandomAccessFile(Str

Java基础知识之IO(2)

文件复制小案例(温习Java基础知识之IO(1)中的知识) package copy; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class CopyDemo { public stat

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

JAVA基础知识之IO——Java IO体系及常用类

Java IO体系 个人觉得可以用"字节流操作类和字符流操作类组成了Java IO体系"来高度概括Java IO体系. 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 )  基于字节的IO操作 基于字符的IO操作   从上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载