在java开发或者android开发中,读取文件是不可避免的,以下对java开发中读取文件做了归纳和详解:

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容

4、随机读取文件内容

package com.czm.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader; import javax.swing.Box.Filler; /**
* 1、按字节读取文件内容
* 2、按字符读取文件内容
* 3、按行读取文件内容
* 4、随机读取文件内容
* @author caizhiming
*
*/
public class ReadFromFile { /**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
* @author caizhiming
*/
public static void readFileByBytes(String fileName){
System.out.println("\n\n================按字节读取=================");
File file = new File(fileName);
InputStream is = null;
try{
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
//一次读一个字节
is = new FileInputStream(file);
int tempByte; while((tempByte = is.read()) != -1){
System.out.write(tempByte);
//System.out.print("=");
}
is.close();
}catch(IOException e){
e.printStackTrace();
return;
}
try{
System.out.println("\n以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempBytes = new byte[100];
int byteRead = 0;
is = new FileInputStream(file);
ReadFromFile.showAvailableBytes(is);
// 读入多个字节到字节数组中,byteRead为一次读入的字节数
while((byteRead = is.read(tempBytes)) != -1){
System.out.write(tempBytes, 0, byteRead);
//System.out.print("=");
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
/**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
* @author caizhiming
*/
public static void readFileByChars(String fileName){
System.out.println("\n\n================按字符读取================="); File file = new File(fileName);
Reader reader = null;
try{
System.out.println("\n以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempChar;
while((tempChar = reader.read()) != -1){
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if(((char)tempChar) != '\r'){
System.out.print((char)tempChar);
}
}
reader.close();
}catch(IOException e){
e.printStackTrace();
} try {
System.out.println("\n以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempChars = new char[30];
int charRead = 0;
reader = new InputStreamReader(new FileInputStream(file));
// 读入多个字符到字符数组中,charRead为一次读取字符数
while((charRead = reader.read(tempChars)) != -1){
// 同样屏蔽掉\r不显示
if((charRead == tempChars.length) && (tempChars[tempChars.length - 1] != '\r')){
System.out.print(tempChars);
}else{
for(int i=0;i<charRead;i++){
if(tempChars[i]=='\r'){
continue;
}else{
System.out.print(tempChars[i]);
}
}
}
}
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(reader != null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 以行为单位读取文件,常用于读面向行的格式化文件
* @author caizhiming
*/
public static void readFileByLines(String fileName){
System.out.println("\n\n================按行读取=================");
File file = new File(fileName);
BufferedReader reader = null; try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
while((tempString = reader.readLine())!=null){
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(reader != null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 随机读取文件内容
* @author caizhiming
*/
public static void readFileByRandomAccess(String fileName){
System.out.println("\n\n================随机读取=================");
RandomAccessFile randomAccessFile = null;
try {
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomAccessFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
int fileLength = (int) randomAccessFile.length();
//读文件的起始位置
int beginPos = (fileLength > 5) ? 5:0;
//将文件的开始位置移到beginPos位置
randomAccessFile.seek(beginPos); byte[] bytes = new byte[12];
int byteRead = 0;
// 一次读10个字节,如果文件内容不足12个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteRead
while((byteRead = randomAccessFile.read(bytes)) != -1){
System.out.write(bytes, 0, byteRead);
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(randomAccessFile != null){
try {
randomAccessFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 显示输入流中还剩的字节数
*/
private static void showAvailableBytes(InputStream is) {
try {
System.out.println("当前字节输入流中的字节数为:" + is.available());
} catch (IOException e) {
e.printStackTrace();
}
} }

5、将内容追加到文件尾部

package com.czm.io;

import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile; /**
* 将内容追加到文件尾部
* @author caizhiming
*
*/
public class AppendToFile { /**
* 追加文件:使用RandomAccessFile
* @author caizhiming
*/
public static void appendByRandomAccessFile(String fileName, String content){
System.out.println("\n\n================使用RandomAccessFile追加内容到文件尾部=================");
RandomAccessFile randomAccessFile = null;
try {
//属性必须设置为rw,即为可写可读属性
randomAccessFile = new RandomAccessFile(fileName, "rw");
int fileLength = (int) randomAccessFile.length(); //将写文件指针移动到文件尾
randomAccessFile.seek(fileLength);
//randomAccessFile.writeBytes(content);
byte[] bytes = content.getBytes("UTF-8");
randomAccessFile.write(bytes); } catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(randomAccessFile != null){
try {
randomAccessFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 追加文件:使用FileWriter
* @author caizhiming
*/
public static void appendByFileWriter(String fileName, String content){
System.out.println("\n\n================使用FileWriter追加内容到文件尾部=================");
FileWriter fileWriter = null;
try {
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
fileWriter = new FileWriter(fileName, true);
fileWriter.write(content);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(fileWriter != null){
try {
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
}

最后测试用例:

public class IOTester {
public static void main(String[] args){
String file = "D:/test/iotest.txt";
ReadFromFile.readFileByBytes(file); ReadFromFile.readFileByChars(file);
ReadFromFile.readFileByLines(file);
ReadFromFile.readFileByRandomAccess(file); AppendToFile.appendByRandomAccessFile(file, "\n我是采用RandomAccessFile方法追加进来的内容");
AppendToFile.appendByFileWriter(file, "\n我是采用FileWriter方法追加进来的内容");
}
}

下面是测试截图:

 

Java开发之I/O读取文件实例详解的更多相关文章

  1. 我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了

    一个十足的技术迷,2013年毕业,做过ERP.游戏.计算广告,在大公司呆过,但终究不满足仅对技术的应用,在2018年末离开了公司,全职写了一本书<深入解析Java编译器:源码剖析与实例详解> ...

  2. python linecache模块读取文件用法详解

    linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. linecache.getlines(filename) 从名为filename的文件中得到 ...

  3. Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  4. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  5. php 读取功能分割大文件实例详解

    在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求 ...

  6. Java MyEclipse下Ant build.xml简单实例详解

    一.下载配置ant 1.首先下载ant: http://www.apache.org/ 下载最新的版本2.解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:A ...

  7. 移动端开发之px,em和rem详解

    px:表示的是绝对的像素值,1px就是1像素大小 em:关于em,网上有资料说是关于父元素的,但是其实个人感觉这种说法是不对的,其实em的大小是根据自身的font-size确定的,而只是正常的情况下子 ...

  8. java 流操作对文件的分割和合并的实例详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...

  9. Java FileReader使用相对路径读取文件

    Java FileReader使用相对路径读取文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 在进行编程时需要时常更换主机进行测试,如果使用绝对路径则需要经常更改,为此使用相对路径是一个 ...

随机推荐

  1. 【HDOJ】4516 威威猫系列故事——因式分解

    可解的算法太多了,采用的算法是试x的值.注意题目的输入x^3-2x^2不会写成x^3+-2x^2.一直RE在这儿. /* 4516 */ #include <iostream> #incl ...

  2. MySQL结果集处理

    问题: 1. MySQL对查询的结果集如果返回,一次性还是每条?2. 客户端如何接收结果集? 1. 对于有返回结果集的查询,server端和client端交互的数据包由以下组成: p1:meta da ...

  3. BZOJ_1012_[JSOI2008]_最大数maxnumber_(线段树/树状数组+RMQ)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 两种操作: 1.求序列末尾n个数中的最大值. 2.在序列末尾插入一个数. 分析 线段树求 ...

  4. WordPress Backdoor未授权访问漏洞和信息泄露漏洞

    漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...

  5. apache配置虚拟主机的三种方式

    Apache 配置虚拟主机三种方式   一.基于IP 1. 假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定3个IP: [root@localhos ...

  6. C# MVC模式下商品抽奖

    很久没有写博客,于是就把最近项目需求的一个抽奖功能给整理了下,语言表达能力不好,写的不好请勿吐槽,一笑而过就好.好了下面开始说说这个抽奖功能.因为涉及到公司的项目所以一些敏感的地方均已中文代替. 首先 ...

  7. Android 实用代码七段(二)

    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.获取应用程序下所有Acti ...

  8. import project后,出现Unable to get system library for the project

    import project 后,出现Unable to get system library for the project. 这是因为在import 一个项目的时候,没有指定android sdk ...

  9. boost库的使用(一)

    参考http://www.cnblogs.com/lexus/archive/2012/07/15/2592250.html bjam stage --without-python --toolset ...

  10. iPhone 崩溃日志解析

    方法一.在编译时保留xx.app, xx.app.dSYM在/user目录下,xcode->orgernize->Device Logs就能够自动部分定位地址 方法二.xcode 有自带的 ...