Files

使用 FileInputStream 或 FileReader 可以用于读入文件,前者基于二进制,后者基于文本。使用它们不需要读取整个文件,但是只能按照它们存储的顺序,依次读取字节,或字符。

使用 FileOutputStream 或 FileWriter 可以把数据写出到文件,按照数据被写入的顺序,依次存储数据。

RandomAccessFile 可以在文件中跳转,读入数据,或者写出数据到文件。Random Access 并不意味着你真的从随意的位置读入数据,或者把数据写入到随意位置。而是意味着你可以在文件中跳跃,然后在停留的位置读入数据,并且写出数据。写出数据时,是覆盖原来的数据,不会是数据。

File 类用于获取文件大小,属性,不能用于获取文件内容。

File 类

Java IO API 中的 File 类可以访问底层文件系统,获取文件的信息元,即获取用于描述文件的信息,例如文件大小,属性等。如果需要访问文件内容,需要使用 FileInputStream, FileOutpuStream, RandamAccessFile。在 Java NIO 中,则使用 java.nio.FileChannel 读入文件内容。

创建文件对象的实例

        File file = new File("/tmp/tony/a.txt");

检查文件是否存在

在创建 File 对象时,即使文件不存在,构造器也不会报错。

        File file = new File("/tmp/tony/a.txt");
boolean isFileExist = file.exists();

创建目录

mkdirs() 方法可以创建 File 路径上面没有的全部文件夹。 下面例子中,如果 resources 以及之前的目录已存在,而 aaa 和 bbb 两层目录不存在,mkdirs() 会创建 aaa/ 以及其子目录 bbb/。

        File folder = new File("/tmp/tony/aaa/bbb/");
boolean isSuccess = folder.mkdirs();

mkdir() 方法只会最里面的那个目录。上面例子如果使用 mkdir() ,bbb 不会被创建,因为没有 aaa 目录,返回 false.

文件大小

        File file = new File("/tmp/tony/a.txt");
long size = file.length();

移动文件、改名

修改文件名字,移动文件位置,都是用 renameTo() 方法,和 Linux 中的 mv 命令相似。

        File file = new File("/tmp/tony/a.txt");
boolean isSuccess = file.renameTo(new File("/tmp/tony/aaa/xx.txt"));

删除文件

        File file = new File("/tmp/tony/a.txt");
file.delete();

列举目录下的文件

list() 方法获得目录下的全部文件名, listFiles() 方法获得目录下的全部文件,以 File 对象的形式存在。

        File file = new File("/tmp/tony/a.txt");
String[] subfileNames = file.list();
File[] subFiles = file.listFiles();

FileInputStream 和 FileOutputStream

FileInputStream

FileInputStream 按照 stream 的方式,基于字节,读取文件的内容。FileInputStream 是 InputSteam 的子类。

            InputStream is = new FileInputStream("/tmp/tony/a.txt");
int data = is.read();
while(data != -1){
System.out.print((char)data);
data = is.read();
}
is.close();

FileInputStream 的构造器有:

a. 接收一个 String 类型

            String filePath = "/tmp/tony/a.txt";
InputStream is = new FileInputStream(filePath);

b. 接收一个 File 对象为参数

            File file = new File("/tmp/tony/a.txt");
InputStream is = new FileInputStream(file);

read() 方法,一次读取一个字节,并返回该字节对应的 int 值

read(byte[]) 一次读取一个字节数组

close() 关闭 stream

FileOutputStream

写出数据到文件

            OutputStream os = new FileOutputStream("/tmp/tony/b.txt");
os.write("abcd\n".getBytes());

FileOutputStream 构造器

a. 接收一个参数, String 类型

            OutputStream os = new FileOutputStream("/tmp/tony/a.txt");

b. 接收一个参数,File 类型

            File file = new File("/tmp/tony/b.txt");
OutputStream os1 = new FileOutputStream(file);

c. 接收两个参数。第一个参数用于定位文件,String 或 File 类型;第二个参数表示,在写出数据到文件时,追加还是覆盖 File 文件原有的内容。

            OutputStream os1 = new FileOutputStream("/tmp/tony/a.txt", true);    // append content

            OutputStream os2 = new FileOutputStream("/tmp/tony/a.txt", false);    // overwrite content

wirte() 一次写出一个字节

write(byte[]) 一次写出一个字节数组

flush() 清刷写到 FileOutputStream 的缓冲区的数据到硬盘上。

RandomAccessFile

RandomAccessFile 可以跳到文件中的某个位置,开始读入和写出数据。写出数据时,会覆盖掉文件在该位置原有的内容,这是 FileInputStream 和 FileOutputStream 无法实现的。

FileReader 和 FileWriter

FileReader

FileReader 按照 stream 的方式,基于字符,读取文件的内容,和 FileInputStream 相似。区别在于 FileInputStream 基于 byte , 而 FileReader 基于字符。

            Reader reader = new FileReader("/tmp/tony/a.txt");
int data = reader.read();
while(data != -1){
System.out.print((char)data);
data = reader.read();
}
reader.close

字符集编码

FileReader 使用应用所在环境的编码集,对读入的数据进行解码。如果写出文件的编码集和读入文件时的编码集不一样,就会导致乱码。这时需要制定字符集,不是用 FileReader ,而是用基于 FileInputStream 的 InputStreamReader 。

            InputStream is = new FileInputStream("/tmp/tony/b.txt");
Reader reader = new InputStreamReader(is, "UTF-8");
int data = reader.read();
while(data != -1){
System.out.print((char)data);
data = reader.read();
}
reader.close();

FileWriter

FileWriter 按照 stream 的方式,基于字符,把数据写出到文件中,和 FileOutputStream 相似。区别在于 FileOutputSteam 基于 byte, 而 FileWriter 基于字符。

            Writer writer = new FileWriter("/tmp/tony/c.txt");
writer.write("aaabbb\n");
writer.close();

两个参数的构造器,第一个参数用于定位文件,第二参数表示在写出数据到文件时,是追加还是覆盖文件中原有的内容。

Writer writer1 = new FileWriter("/tmp/tony/a.txt", true);  //appends to file

Writer writer2 = new FileWriter("/tmp/tony/a.txt", false); //overwrites file

FileWriter 在写出数据时,无法指定特定的字符编码集。如果需要指定编码集,则不用用 FileWriter ,而是用基于 FileOutputStream 的 OutputSteamWriter。

            os = new FileOutputStream("/tmp/tony/d.txt");
Writer wt = new OutputStreamWriter(os, "UTF-8");
wt.write("aaa\n你好");
wt.close();

参考资料

Java IO Tutorial, jenkov

[Java] Java IO Files的更多相关文章

  1. Java文件IO操作应该抛弃File拥抱Paths和Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...

  2. Java文件IO操作应该抛弃File拥抱Path和Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...

  3. 二十一、Java基础--------IO流之综合案例分析

    前三篇文章详细介绍了IO流体系所涉及的重点内容,为了帮助理解与学习,本片博客主要是分析一个与IO操作相关的题目. 例1:在我们观看视频时经常要关注的就是视频的时间长度,在学习了IO操作之后,就可以自己 ...

  4. java之io之File类的list()方法过滤目录的使用

    java的io的知识中,File类必须掌握.File类是对文件或者文件夹的封装.它本身并不能对所封装的文件进行读写,它封装的只是文件或文件夹的周边知识,比如 大小啦,创建日期啦,路径啦等等. 如果Fi ...

  5. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  6. Java之IO流详解

    IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中  ←→ 把数据写入硬盘(磁带)  内存中的数据不可持久保存的  输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...

  7. Java面向对象 IO (三)

     Java面向对象  IO  (三) 知识概要:                    (1)IO 流的操作规律                    (2)异常日志信息IO处理          ...

  8. java编程IO简单回顾和学习

    java编程IO操作必不可少的,很久不玩IO,回顾一下,写了几个小程序,记录一下,方便查阅和学习. 1.给出一个整数数组,将其写入一个文件,再从文件中读出,并按整数大小逆序打印. package co ...

  9. Java的IO文档

    1.     File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件 ...

  10. Java学习---IO操作

    基础知识 1.文件操作 Java语言统一将每个文件都视为一个顺序字节流.每个文件或者结束于一个文件结束标志,或者根据系统维护管理数据中所纪录的具体字节数来终止.当一个文件打开时,一个对象就被创建,同时 ...

随机推荐

  1. myeclipse10 中修改html,servlet,jsp等的生成模板

    1.进入myeclipse的安装目录 2.用减压软件,(如winrar)打开common\plugins\com.genuitec.eclipse.wizards_9.0.0.me2011080913 ...

  2. RESTful 架构风格概述

    http://blog.igevin.info/posts/restful-architecture-in-general/(非常好) http://blog.igevin.info/posts/re ...

  3. Delphi Excel

    用delphi写excel文件 2007-03-18 21:12 1.引用:      Excel2000, OleServer,Comobj, StdCtrls 2.声明变量:     ExcelA ...

  4. C语言中short的意思

    short和int等一样,是C或C++的一种内部数据类型.用于表示有符号整数.不同的是,他们在内存中所占的空间大小不同,short通常为int所占一半,也有一些实现为和int一样,但不会比int大.所 ...

  5. X-Plane飞行模拟资源整理一

    计划开一个博客整理一下飞行仿真软件二次开发的相关内容 预计将陆续介绍X-Plane.Microsoft Flight Simulator.FlightGear三个主流飞行模拟器. 此处为目录(占坑,随 ...

  6. Qt5下的常见问题————C1083

    很多像我一样刚开始学习Qt的时候都会遇到这样的问题.例如"fatal error C1083: 无法打开包括文件:“QApplication”: No such file or direct ...

  7. [Linux]ubuntu安装ftp服务器

     1: 安装vsftpd~$ sudo apt-get install vsftpd  or~$ yum install vsftpd温馨提示:ubuntu10.10自己装了,这步省略. 2: 配置v ...

  8. C# 启动和结束一个线程

    在程序执行中会遇到启动本软件的exe问,或者启用其它的exe文件,已达到执行某些操作的作用.下面是两种最常见的启动exe文件. 1.调用系统dll使用其提供的方法. 引用的dll, [DllImpor ...

  9. python 连 mongodb

    这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...

  10. 读书笔记-《Training Products of Experts by Minimizing Contrastive Divergence》

    Training Products of Experts by Minimizing Contrastive Divergence(以下简称 PoE)是 DBN 和深度学习理论的 肇始之篇,最近在爬梳 ...