【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 ...
随机推荐
- vue 在使用v-html绑定的时候,里面的元素不会继承外部的css,解决方案
问题 想用vue绑定父文本生成的HTML内容,但是发现CSS样式根本不生效,选择器没起作用 代码: <div class="announcedetailImg" v-html ...
- 使用Junit进行自动单元测试
软件工程第二次作业 选择开发工具 使用Eclipse进行java程序编写:安装过程如图: 练习自动单元测试技术 参考资料:[Junit入门使用教程][https://www.cnblogs.com/y ...
- Python获取当前时间及格式化
1.导入time模块 # 导入time模块 import time 2.打印时间戳-time.time() # 导入time模块 import time # 打印时间戳 print(time.time ...
- 里氏替换原则(Liskov Substitution Principle) LSP
using System; using System.Collections.Generic; using System.Text; namespace LiskovSubstitutionPrinc ...
- 水平垂直居中方案与flexbox布局
[前端攻略]最全面的水平垂直居中方案与flexbox布局 最近又遇到许多垂直居中的问题,这是Css布局当中十分常见的一个问题,诸如定长定宽或不定长宽的各类容器的垂直居中,其实都有很多种解决方案.而 ...
- flask-restful 请求解析
基本参数 from flask import Flask from flask.ext.restful import reqparse, abort, Api, Resource app = Flas ...
- [shell基础]——echo命令
echo命令:在shell中主要用于输出 1. -n 不换行的显示结果(默认是换行的) 2. -e " " 支持双引号中使用一些特殊字符 常用的特殊字符有 \a 发出警告 ...
- CF 303C——Minimum Modular——————【剪枝】
Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- bzoj 5340: [Ctsc2018]假面
Description 题面 Solution 生命值范围比较小,首先维护每一个人在每个血量的概率,从而算出生存的概率,设为 \(a[i]\) 询问时,只需要考虑生存的人数,可以 \(DP\) 设 \ ...
- UML建模概述
UML的组成主要有事物.图.关系. UML中的事物: (1)构件事物:UML模型的静态部分,描述概念或物理元素,包括以下 a. 类:类是对一组具有相同属性.相同操作.相同关系和相同语义的对象的抽象.包 ...