java中文件操作《一》
在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File、inputStream、outputStream、FileInputStream、FileOutputStream、reader、writer、FileReader、FileWriter等等,其中对文件的操作又分为两大类,一类是字符流,一类是字节流。所谓的字符流是以字节(8b)为单位进行读/写,字符流即使用字符为单位读/写,java使用unicode编码,一个字符两个字节,下面分别对字节流和字符流做如下阐述,
一、字节流
字节流即以字节为单位进行读/写,使用于操作二进制文件,比如,图像、视频、音频等文件。
在字节流中又分为读和写,这里的读和写是针对于程序而言。读,即从磁盘读取文件到程序;写,即写入内容到磁盘。
在字节流中inputStream和outputStream作为读和写的抽象类,仅仅定义了一部分基本的方法,具体的操作由其子类完成。其子类如下图所示,
这里重点对FileInputStream和FileOutputStream进行说明。
FileInputStream是以字节方式读取的文件操作类,
其构造方法如下图,

有三个构造方法,主要对第一个和第三个进行说明,第一个的参数为File对象,第三个为一个文件路径,如果此文件路径表示的文件不存在,则会抛出文件不存在的异常。
使用FileInputStream进行读取文件时主要用到的方法有:read()、read(byte[] b),
read() 一次读取一个字节,返回值是此字节int类型数值
read(byte[] b) 一次读取b.length个字节,返回值是读取的字节数
使用方法如下,
package cn.com.test; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class ReadFileByBytes { public static void main(String[] args) {
// TODO Auto-generated method stub FileInputStream fis=null;
try {
fis=new FileInputStream("e:\\11.txt"); //1、使用read()方法读取
int b;
while((b=fis.read())!=-1){//如果返回值为-1,则代表文件已经读完
//do something
}
//2、使用read(byte[] b)方式读取
int bs;//存储每次读取的字节数
byte[] bytes=new byte[1024];//定义一个1024个字节的数组,作为缓冲池
while((bs=fis.read(bytes))!=-1){//返回值为-1,代表文件读取完毕
//文件已经读取到了bytes数组中
String str=new String(bytes);//使用每次的字节数组生成字符串 } } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } }
以上代码中分别使用两种方式对文件进行了读取,其返回值都是-1,-1代表的意思是读到了文件末尾,文件已经读取完毕,且最后需要关闭输入流。
字节方式的写文件和读文件相似,方法为write(int b)、write(byte[] b),即一次写一个字节,一次写一个字节数组。
二、字符流
字符流,即每次是以字符为单位读/写文件,在字符流中有Reader和Writer,其中reader的介绍如下,

reader也是一个抽象类,其子类主要有BufferedReader、FilterReader、InputStreamReader。在使用字节流的时候,使用了FileInputStream,在字符流中也有FileReader,只不过是作为InputStreamReader的子类,InputStreamReader和BufferedReader是两个很有意思的类,放在下次再说。

其构造方法和FileInputStream是一样的,同样我们常用的是以下两个
下面看具体的读取方式,既然在FileInputStream中是按照字节读取,那么在FileReader中即是按照字符读取,read()和read(char[] c),第一个方法读到的字符,以int类型返回,第二个方法返回读取到的字符数。
package cn.com.test; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class ReadFileByChars { public static void main(String[] args) {
// TODO Auto-generated method stub FileReader fr=null;
try {
fr=new FileReader("e:\\11.txt"); //1、使用read()方法读取
int b;
while((b=fr.read())!=-1){//如果返回值为-1,则代表文件已经读完
//do something
}
//2、使用read(char c)方式读取
int bs;//存储每次读取的字符数
char[] chars=new char[1024];//定义一个1024个字符的数组,作为缓冲池
while((bs=fr.read(chars))!=-1){//返回值为-1,代表文件读取完毕
//文件已经读取到了bytes数组中
String str=new String(chars);//使用每次的字符数组生成字符串 } } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } }
上面使用了read和read(char[] c)两种方法读取文件
使用字符的方式写文件是一样的,使用FileWriter类的writer(char c)和writer(char[] c)方法,分别写入一个字符和字符数据组。
通过上面的说明我们发现,字节和字符两种方式操作文件的方式是大同小异的,使用的方法都是read和write方法,只是操作的单位不一样。把这两种方式放在一起更容易理解掌握,欢迎提出不同意见,谢谢!!!
java中文件操作《一》的更多相关文章
- java中文件操作的工具类
代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...
- java中文件操作
例一:从一个文件读入数据,然后写入另外一个文件 package lipika; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- java中文件的I/O操作
java中文件的读写操作 (一) (1)java中文件的字节转成字符读操作 FileInputStream fStream = new FileInputStream("test.txt&q ...
- Java中创建操作文件和文件夹的工具类
Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...
- java常见文件操作
收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...
- JAVA中文件与Byte数组相互转换的方法
JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...
- php中文件操作常用函数有哪些
php中文件操作常用函数有哪些 一.总结 一句话总结:读写文件函数 判断文件或者目录是否存在函数 创建目录函数 file_exists() mkdir() file_get_content() fil ...
- python中文件操作的六种模式及对文件某一行进行修改的方法
一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...
- python中文件操作的其他方法
前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...
随机推荐
- delphi 7 mdi子窗体。。。无法更改以命令对象为源的记录集对象的 ActiveConnection 属性。
问题是这样的 我做了一个小程序 把 adoconnection放到了主窗体 连接的是access数据库; 新建了一个子窗体继承自FBase 新建了一个pubulic方法 qrySearch 实现了 ...
- 使用Maven构建SSH
本人自己进行的SSH整合,中间遇到不少问题,特此做些总结,仅供参考. 项目环境: struts-2.3.31 + spring-4.3.7 + hibernate-4.2.21 + maven-3.3 ...
- 在c++中,标准输入string时cin 与getline两个函数之间的区别
cin: cin函数是标准库的输入函数,在读取string时遵循以下规则: 1)读取并忽略开头所有的空白符(包括空格.换行符.制表符). 2)读取字符直到遇到空白符,读取终止. 例如: 当输入的是“ ...
- jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具
jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...
- [进程管理] Linux中Load average的理解
Load average的定义 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树.如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等待I/O操作的结果 - 它没有主动进入等待状 ...
- OSI七层模型学习笔记
1.简介 什么是OSI模型呢? OSI模型全名Open System InterConnect 即开放式系统互联,是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架, ...
- O(mn)实现LCIS
序: LCIS即求两序列的最长公共不下降子序列.思路于LCS基本一致. 用dp[i][j]记录当前最大值. 代码实现: /* About: LCIS O(mn) Auther: kongse_qi D ...
- spring security 配置多个AuthenticationProvider
前言 发现很少关于spring security的文章,基本都是入门级的,配个UserServiceDetails或者配个路由控制就完事了,而且很多还是xml配置,国内通病...so,本文里的配置都是 ...
- 省市区三级联动(jquery+ajax)(封装和不封装两种方式)-----2017-05-15
首先,要实现如下图效果, 1.要理清思路: 先做出三个下拉菜单----根据第一个下拉菜单的value值获取第二个下拉列表的内容,第三个同理. 2.用到的数据库表:Chinastates表 规律:根据国 ...
- springboot(二):web综合开发
上篇文章介绍了spring boot初级教程:spring boot(一):入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它 ...