前言

  任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作。这里简单介绍下reader,wirter,inputstream,outputstream的使用方法。其实Apache commons里面有个方法IOUtils可是实现方便快捷的流拷贝,感兴趣的可以参考官方文档。

  JAVA的输入输出流有两种,一种是字节流(InPutStream,OutPutStream),一种是字符流(Reader,Writer)。

  字节流是普遍适用的,比如我们读取一个视频,音乐,或者文本都可以用这种方式。

  字符流只能读取类似文本这种文件。那么它们之间是什么关系呢?看下面这张图吧!

  大致可以看到它们之间的关系,我们可以使用InPutStreamReader来实现字节流到字符流的转换。比如

Reader reader = new InputStreamReader(new FileInputStream(fileName));

  也可以使用OutPutStreamWriter来实现字节流到字符流的转换,如

Writer writer = new OutputStreamWriter(new FileOutputStream(filePathName));

  下面简单介绍下,文件读取和文件写入的样例!

  按行读取文件!

 /**
* 以行为单位读取文件,常用于读面向行的格式化文件
*
* @paramfileName:文件名
*/
public static List<String> readFileByLines(String fileName) {
List<String> list = new ArrayList<String>();
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
/* 一次读入一行,直到读入null为文件结束 */
while ((tempString = reader.readLine()) != null) {
System.out.println(tempString);
list.add(tempString);
}
} catch (IOException e) {
System.out.println("读取文本文件异常" + e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
System.out.println("读取文本文件异常" + e1);
}
}
}
}
return list;
}

  向文件中写入内容,直接覆盖掉原来的内容。

 /**
* 把内容写到文件
*
* @paramfilePathName文件名
* @paramList<String>文件内容
*/
public static boolean writerFile(String filePathName, String content) {
boolean flag = false;
OutputStreamWriter osw = null;
try {
if (filePathName != null && !"".equals(filePathName)) {
osw = new OutputStreamWriter(new FileOutputStream(filePathName));
}
} catch (FileNotFoundException e1) {
flag = false;
e1.printStackTrace();
}
if (osw != null) {
BufferedWriter bw = new BufferedWriter(osw);
try {
if (content != null && !"".equals(content)) {
bw.write(content);
flag = true;
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} finally {
try {
bw.close();
osw.close();
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
}

  向文件中追加内容,追加到末尾。

 /**
* 把内容写到文件或追加到文件中
*
* @paramfilePathName文件名
* @paramList<String>文件内容
*/
public static boolean writerFileIsAppend(String filePathName, String content) {
boolean flag = false;
OutputStreamWriter osw = null;
try {
if (filePathName != null && !"".equals(filePathName)) {
osw = new OutputStreamWriter(new FileOutputStream(filePathName,
true));
}
} catch (Exception e1) {
flag = false;
e1.printStackTrace();
}
if (osw != null) {
BufferedWriter bw = new BufferedWriter(osw);
try {
if (content != null && !"".equals(content)) {
bw.write(content);
flag = true;
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} finally {
try {
bw.close();
osw.close();
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
}

  全部代码

  

 package testIO;

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List; public class testIO {
public static void main(String[] args) {
readFileByBytes("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
readFileByChars("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
readFileByLines("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
writerFile("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
"BufferedWriter");
writerFileIsAppend("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
"Append");
} /**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*
* @paramfileName:文件的名
*/
public static void readFileByBytes(String fileName) {
File file = new File(fileName);
InputStream in = null;
try {
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
/* 一次读多个字节 */
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(file);
/* 读入多个字节到字节数组中,byteread为一次读入的字节数 */
while ((byteread = in.read(tempbytes)) != -1) {
for (byte b : tempbytes) {
System.out.println((char) b);
}
System.out.println(byteread);
}
} catch (Exception e1) {
System.out.println("读取文本文件异常" + e1);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
System.out.println("读取文本文件异常" + e1);
}
}
}
} /**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
*
* @paramfileName:文件名
*/
public static void readFileByChars(String fileName) {
Reader reader = null;
try {
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
/* 一次读多个字符 */
char[] tempchars = new char[100];
int charread = 0;
if (fileName != null && !"".equals(fileName)) {
reader = new InputStreamReader(new FileInputStream(fileName));
/* 读入多个字符到字符数组中,charread为一次读取字符数 */
while ((charread = reader.read(tempchars)) != -1) {
for (char c : tempchars) {
System.out.println(c);
}
}
}
} catch (Exception e1) {
System.out.println("读取文本文件异常" + e1);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
System.out.println("读取文本文件异常" + e1);
}
}
}
} /**
* 以行为单位读取文件,常用于读面向行的格式化文件
*
* @paramfileName:文件名
*/
public static List<String> readFileByLines(String fileName) {
List<String> list = new ArrayList<String>();
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
/* 一次读入一行,直到读入null为文件结束 */
while ((tempString = reader.readLine()) != null) {
System.out.println(tempString);
list.add(tempString);
}
} catch (IOException e) {
System.out.println("读取文本文件异常" + e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
System.out.println("读取文本文件异常" + e1);
}
}
}
}
return list;
} /**
* 把内容写到文件
*
* @paramfilePathName文件名
* @paramList<String>文件内容
*/
public static boolean writerFile(String filePathName, String content) {
boolean flag = false;
OutputStreamWriter osw = null;
try {
if (filePathName != null && !"".equals(filePathName)) {
osw = new OutputStreamWriter(new FileOutputStream(filePathName));
}
} catch (FileNotFoundException e1) {
flag = false;
e1.printStackTrace();
}
if (osw != null) {
BufferedWriter bw = new BufferedWriter(osw);
try {
if (content != null && !"".equals(content)) {
bw.write(content);
flag = true;
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} finally {
try {
bw.close();
osw.close();
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
} /**
* 把内容写到文件或追加到文件中
*
* @paramfilePathName文件名
* @paramList<String>文件内容
*/
public static boolean writerFileIsAppend(String filePathName, String content) {
boolean flag = false;
OutputStreamWriter osw = null;
try {
if (filePathName != null && !"".equals(filePathName)) {
osw = new OutputStreamWriter(new FileOutputStream(filePathName,
true));
}
} catch (Exception e1) {
flag = false;
e1.printStackTrace();
}
if (osw != null) {
BufferedWriter bw = new BufferedWriter(osw);
try {
if (content != null && !"".equals(content)) {
bw.write(content);
flag = true;
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} finally {
try {
bw.close();
osw.close();
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
}
}

  内容参考

http://www.2cto.com/kf/201206/136072.html

http://blog.csdn.net/liuhenghui5201/article/details/8292552

【java开发系列】—— java输入输出流的更多相关文章

  1. java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器

    java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...

  2. 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器

    java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...

  3. JAVA之I/O 输入输出流详解

    简    介 如何在Java中进行文件的读写,Java IO流是必备的知识.这篇博文主要为您带来Java中的输入输出流的内容,包括文件编码.使用File类对文件和目录进行管理.字节流和字符流的基本操作 ...

  4. Java修炼——文件字节输入输出流复制和缓冲流复制

    一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...

  5. 【java开发系列】—— JDK安装

    前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...

  6. 【java开发系列】—— Tomcat编译报错

    由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...

  7. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  8. Java开发系列-JDBC

    概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...

  9. Java面试系列--java基础

    Java基础总结 JAVA中的几种基本数据类型是什么,各自占用多少字节. 八大基本数据类型,byte:8位,short:16位,int:32位,long:64位,float:32位,double:64 ...

随机推荐

  1. PIE SDK文本元素的绘制

    1. 功能简介 在数据的处理中会用到文本元素的绘制,利用ITextElement文本元素接口进行绘制,目前PIE SDK支持ITextSymbol符号接口,TextSymbol对象是用于修饰文字元素对 ...

  2. 从零开始学Linux(11)--more

    more命令,是将文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空格键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还 ...

  3. leetcode 862 shorest subarray with sum at least K

    https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/ 首先回顾一下求max子数组的值的方法是:记录一个前缀min值, ...

  4. 重新分析connection reset by peer, socket write error错误原因

    上次写<connection reset by peer, socket write error问题排查>已经过去大半年,当时把问题"敷衍"过去了. 但是此后每隔一段时 ...

  5. Oracle使用sys登录时报错ORA-28009解决方法

    情况一:使用sqlplus登录: 正常输入用户名的口令,就会报错,因为SYS是在数据库之外的超级管理员,所以我们在登录的时候 要在输入口令:口令+as sysdba(比如:123456 as sysd ...

  6. bzoj 4573: [Zjoi2016]大森林

    Description 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树 都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. ...

  7. ASP .NET SVN && emmet 插件

    学习  ASP .NET 时间的第三周: 来讲讲如何在 visual studio 2013...上搭载 SVN吧: 废话不多说: One Step: 电脑上已安装 visual studio 201 ...

  8. 远程SQL Server连接不上

    运行 cmd -> 输入 netsh winsock reset重启后 应该可以连接sql了

  9. 多线程TCP的socket通信

    应用多线程来实现服务器与多客户端之间的通信. 基本步骤: 1.服务器端创建ServerSocket,循环调用accept()等待客户端的连接 2.客户端创建一个socket并请求和服务器端的连接 3. ...

  10. 编程提取字符串"Java is a programming language"中的各个单词,并打印输出。

    import java.lang.String; import java.util.StringTokenizer; public class StringGetWord{ /* 编程提取字符串&qu ...