前言

  任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作。这里简单介绍下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. 线性递推规律BM杜教

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  2. HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)

    题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...

  3. Apache Shiro(三)-登录认证和权限管理MD5加密

    md5 加密 在前面的例子里,用户密码是明文的,这样是有巨大风险的,一旦泄露,就不好了.所以,通常都会采用非对称加密,什么是非对称呢?就是不可逆的,而 md5 就是这样一个算法.如代码所示 123 用 ...

  4. vi下搜索文本

    ) /user ) n 下一个匹配 ) N 上一个匹配 ) ?user 从结尾开始搜索 ) :nohlsearch 关闭高亮显示6) :100 跳转到第100行

  5. [转] 浏览器自动化测试初探:使用 phantomjs 与 casperjs

    [From] https://www.qcloud.com/community/article/641602001489391648 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测 ...

  6. DOC窗口之cd命令(windows)

    cd的全称是Change Directory,改变文件夹,也就是切换路径.后面可以接驱动器符号.完整路径和相对路径. 通常win+R,输入cmd,便会看到以下界面, 通常,这个命令下并没有我们想要处理 ...

  7. spark第二篇:Application Submission Guide

    提交应用 Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序.它可以通过一个统一的接口使用所有Spark支持的集群管理器. 绑定应用程序的依赖 如果你的代码依赖其他项目,你 ...

  8. linux运维配置讲解--sshd-config

    文件配置: 1, /etc/ssh/sshd_config ssh配置文件 2, /etc/shadow 密码文件 3, /etc/sudoers 授权用户管理文件 4, /etc/issue 系统信 ...

  9. 【程序员技术练级】学习一门脚本语言 python(一)文件处理

    现在工作上主要用的语言是java,java在企业级的应用上能够发挥很好的用途,但有时候要做一个小功能时,比如批量更新文件,抓取网页等,这时候用java就显得太笨重了.因此就学习了python这门脚本语 ...

  10. pycharm Python解释器的配置--可以指定批处理文件为解释器

    这样就可以很方便的配置一些环境变量了,很方便很有创意的功能,再次Mark一下以防忘记