(一) Java的IO通过java.io包下的类和接口来支持,在java.io包下主要包括输入、输出两种IO流。

   每种输入、输出流又分为字节流和字符流两大类:

    (1)字节流以字节为单位来处理输入、输出操作

    (2)字符流则以字符来处理输入、输出操作

    除此之外,Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物理存储节点之间关联---不同的物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。

(二)File类

  File类是java.io包下代表与平台无关的文件和目录,如果系统程序操作文件和目录都可以通过File类来完成。但是File不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

(三)访问文件和目录

  File类提供了很多方法来操作文件和目录:

  1.访问文件名相关的方法:

    a. String getName():返回此File对象所表示的文件名或路径名

    b. String getPath():返回此File对象所对应的路径名

    c. File getAbsoluteFile(): 返回此File对象所对应的绝对路径所对应的File对象

    d. String getParent():返回此File对象所对应目录的父目录名

    e. boolean rename(File newName):重命名此File对象所对应的文件或目录,如果重命名成功,则返回true,否则返回false

  2. 文件检测相关的方法

    a. boolean exists():判断File对象所对应的文件或目录是否存在

    b. boolean canWrite():判断File对象所对应的文件盒目录是否可写

    c. boolean canRead():判断File对象所对应的文件盒目录是否可读

    d. boolean isFile():判断File对象所对应的是否是文件,而不是目录

    e. boolean isDirectory():判断File对象所对应的是否是目录,而不是文件

    f. boolean isAbsolete():判断File对象所对应的文件或目录是否是绝对路径。

  3. 获取常规文件信息

    a. long lastModified():返回文件的最后修改时间

    b. long length():返回文件内容的长度

  4. 文件操作相关的方法

    a. boolean createNewFile(): 当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false.

    b. boolean delete():删除File对象所对应的文件或路径

  5. 目录操作相关的方法

    a. boolean mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false。调用该方法时File对象必须对应一个路径,而不是一个文件。 

    b. String[] list():列出File对象的所有子文件名和路径名,返回String数组。

    c. File[] listFiles():列出File对象的所有子文件和路径,返回File数组。

    d. static File[] listRoots(): 列出系统所有的根路径。

下面举例说明下:

 

import java.io.File;
import java.io.IOException; public class FileTest
{
public static void main(String[] args) throws IOException
{
//以当前路径来创建一个File对象
File file = new File("."); //直接获取文件名,输出一点
System.out.println(file.getName()); //获取相对路径的父路径可能出错,下面代码输出null
System.out.println(file.getParent()); //获取绝对路径
System.out.println(file.getAbsoluteFile()); //获取上一级路径
System.out.println(file.getAbsoluteFile().getParent()); //在当前路径下创建一个临时文件
File tmpFile = File.createTempFile("aaa", ".txt",file); //指定当JVM退出时删除该文件
tmpFile.deleteOnExit(); //以系统当前时间作为新文件名来创建新文件
File newFile = new File(System.currentTimeMillis() + "");
System.out.println("newFile对象是否存在 : " + newFile.exists()); //以指定newFile对象来创建一个文件
newFile.createNewFile(); //使用list()方法列出当前路径下的所有文件和路径
String[] fileList = file.list();
System.out.println("=====当前路径下所有文件和路径如下=====");
for(String fileName : fileList)
{
System.out.println(fileName);
} //listRoots()静态方法列出所有的磁盘根路径
File[] roots = file.listRoots();
System.out.println("=======系统所有根路径如下=======");
for(File root : roots)
{
System.out.println(root);
}
}
}

运行结果:

.
null
H:\OhMyGod\Test\.
H:\OhMyGod\Test
newFile对象是否存在 : false
=====当前路径下所有文件和路径如下=====
.classpath
.project
.settings
1390727504600
aaa1644796813208724263.txt
aaa6169179965396772881.txt
bin
out.txt
props.txt
src
text.txt
=======系统所有根路径如下=======
C:\
D:\
E:\
G:\
H:\
I:\
J:\
K:\
L:\
M:\

(四)文件过滤器

  在File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。

  FilenameFilter接口里包含了一个accept(File dir,String name)方法,该方法将依次对指定File的所有子目录或者文件进行迭代,如果该方法返回true,则list()方法会列出该子目录或者文件。

  举例:

  

import java.io.File;
import java.io.FilenameFilter; public class FilenameFilterTest
{
public static void main(String[] args)
{
File file = new File(".");
String[] nameList = file.list(new MyFilenameFilter()); for(String name : nameList)
{
System.out.println(name);
}
}
} //实现自己的FilenameFilter实现类
class MyFilenameFilter implements FilenameFilter
{
@Override
public boolean accept(File dir, String name)
{
return name.endsWith(".java") || new File(name).isDirectory();
}
}

第15章-输入/输出 --- File类的更多相关文章

  1. Java 输入/输出——File类

    File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成.值得指出的是,不管是文件还是目录都是使用File来操作的,File能新建 ...

  2. 第15章-输入/输出 --- 理解Java的IO流

    (一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...

  3. I/O(输入/输出)---File类

    File:表示文件与目录.用它来对文件或目录进行基本操作,它可以查出文件的基本相关信息,比如:名称.最后的修改日期.文件大小. 使用File类操作文件和目录属性步骤: 1.引入File类 import ...

  4. 输入和输出--File类

    输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入 ...

  5. 第四章输入/输出(I/O)4.2PCL中I/O模块及类介绍

    PCL中I/O库提供了点云文件输入输出相关的操作类,并封装了OpenNI兼容的设备源数据获取接口,可直接从众多感知设备获取点云图像等数据.I/O模块利用21个类和28个函数实现了对点云的获取.读入.存 ...

  6. 【知识强化】第五章 输入/输出(I/O)管理 5.1 I/O管理概述

    这门课的最后一个章节——设备管理. 操作系统它作为系统资源的管理者,既需要对上层的软件进行管理,也需要对下层的硬件进行管理.操作系统它需要对处理机还有存储器这些硬件进行管理,但是这些硬件其实是在计算机 ...

  7. 【知识强化】第五章 输入/输出(I/O)管理 5.2 I/O核心子系统I

    学习I/O核心子系统相关的一系列功能. 设备独立性软件.设备驱动程序.中断处理程序这三层其实是属于操作系统的内核部分的,所以它们也称作“I/O核心子系统”,又可以简称为“I/O系统”.在考研当中我们需 ...

  8. 【C++ Primer 第15章】定义派生类析构函数

    学习资料 • 基类和派生类析构函数执行顺序 定义派生类析构函数 [注意]定义一个对象时先调用基类的构造函数.然后调用派生类的构造函数:析构的时候恰好相反:先调用派生类的析构函数.然后调用基类的析构函数 ...

  9. 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符

    学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 [注意]对派生类进行拷贝构造时,如果想让基类的成 ...

随机推荐

  1. path和classpath的区别

    path的作用 path是系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行JAVA文件,但必须把完整的路径写出来,如C:\Program Files\Java\jdk1.6 ...

  2. UNIX网络编程——僵尸进程

         在fork()/exec()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进 ...

  3. Android:ADB server didn't ACK或者adb server is out of date. killing解决办法

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 出现这个原因我个人感觉有两个.一.5037端口被别的程序或者进程占用:二.adb占用的不是5037端口.很多人仅仅知道第一种二忽 ...

  4. iOS开发之四:常用控件--UIButton的使用

    在介绍UIButton的用法前,要先了解一下它的父类UIControl,UIControl是所有具有事件处理功能控件的父类. 而该类控件一般响应事件又有三种形式:基于触摸.基础值.基础编辑.控件的层次 ...

  5. android开发要避免的那些坑

    SparseArray 目前有很多地方从性能优化方说使用SparseArray来替换hashMap,来节省内存,提高性能. Linkify.addLinks() 这个类可以更方便的为文本添加超链接. ...

  6. Android学习之Animation(三)

    今天观看了一个关于android动画的一些知识,就顺便记录下来,以备之后的学习和参考. 在XML文件中使用LayoutAnimationController 第一步: 在res/anim文件夹下创建一 ...

  7. MariaDB存储引擎

    MariaDB存储引擎 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MariaDB的特点,而且是一种插入式的存储引擎概念.这决定了MariaDB数据库中的表可 ...

  8. (六十七)Xcode导入XMPPFramework框架

    首先下载XMPPFramework框架,将Vendor内容导入到工程中,其中KissXML需要额外的框架,需要通过Xcode设置. 选择工程选项中TARGETS的General标签,最下侧有Linke ...

  9. 图文浅析Binder机制

    总述: Binder是Android系统提供的一种IPC机制,Android系统基本就可以看做基于Binder的C/S架构,Binder也是C/S形式出现,它属于驱动但是驱动的一段内存而不是设备,框架 ...

  10. ios swift模仿qq登陆界面,xml布局

    给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/a ...