【java开发系列】—— java输入输出流
前言
任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作。这里简单介绍下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输入输出流的更多相关文章
- java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- JAVA之I/O 输入输出流详解
简 介 如何在Java中进行文件的读写,Java IO流是必备的知识.这篇博文主要为您带来Java中的输入输出流的内容,包括文件编码.使用File类对文件和目录进行管理.字节流和字符流的基本操作 ...
- Java修炼——文件字节输入输出流复制和缓冲流复制
一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...
- 【java开发系列】—— JDK安装
前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...
- 【java开发系列】—— Tomcat编译报错
由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...
- Java开发系列-文件上传
概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...
- Java开发系列-JDBC
概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...
- Java面试系列--java基础
Java基础总结 JAVA中的几种基本数据类型是什么,各自占用多少字节. 八大基本数据类型,byte:8位,short:16位,int:32位,long:64位,float:32位,double:64 ...
随机推荐
- UVA - 10543 LIS
题意:见大白Page93 真没想到是两边分别设为终点和起点的LIS和..LDS? 注意,要求对称,所以分别取min #include<iostream> #include<algor ...
- php 的基本语法
八种数据类型: 4种标量类型:boolean.integer.float.string 2种复合类型:array.object 2种特殊类型:resource.NULL 如果想看某个表达式的值和类型用 ...
- [转] JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
[From] http://www.jb51.net/article/76695.htm HTML 5中的full screen,目前可以在除IE和opera外的浏览器中使用 ,有的时候用来做全屏AP ...
- 设计模式学习总结(七)适配器模式(Adapter)
适配器模式主要是通过适配器来实现接口的统一,如要实现国内手机在国外充电,则需要在不同的国家采用不同的适配器来进行兼容! 一.示例展示: 以下例子主要通过给笔记本电脑添加类似手机打电话和发短信的功能来详 ...
- 第一章:hybrid app开发之技术选型
伴随着移动互联网的兴起,越来越多的企业将部分资源投入其中,想在互联网+的大潮中分一杯羹,并期望着站在风口上,成为时代的弄潮儿. 现在不会做一个app都不好意思说是搞互联网的,那么开发一个app的方式有 ...
- [转]JQuery控制div外点击隐藏,div内点击不会隐藏
一直弄清楚这个效果如何实现,看了这篇博客的几行代码原来如此简单,就是利用了事件冒泡而已. 比如有个div其id为body,实现在div外点击隐藏,div内点击不隐藏,采用jQuery实现如下: $(& ...
- 阿里云服务器对外开放tomcat端口访问
今天第一次在阿里云服务器ecs上安装完成tomcat,然后启动tomcat之后.在本地输入ip:端口,发现不能访问. 出现这个的原因可能是你购买的服务器是 专有网络 类型的 如果是专有网络类型的服务器 ...
- TOJ 3176 Challenge from XOR
Description Mr. AngelClover just learnt XOR on his Computer Class. XOR is a bit arithmetic operator ...
- TOJ 3635 过山车
Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找 个个男生做partne ...
- 跨域策略文件crossdomain.xml文件
使用crossdomain.xml让Flash可以跨域传输数据 一.crossdomain.xml文件的作用 跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器.跨域策略文件 ...