java+++IO流操作
序:IO流的操作主要分为两种读和写。一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读写,当然加了缓冲类其效率更高。另一方面:当我们需要进行流转换时,主要为了解决读取乱码问题,且字节流能够进行编码指定,因此需要字节流到字符流的转换。
1.字符流的读写+不加BufferedReader/Writer
public class CharIOTest {
/**
* 流转换读取数据.
* @throws FileNotFoundException
* @throws IOException
* @throws IOException
*/
@Test
public void readChangeTest() throws IOException {
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
FileInputStream fis = new FileInputStream(file);// 获取该文件的输入流
InputStreamReader isr=new InputStreamReader(fis, "gbk");
char[] bb = new char[1024];// 用来保存每次读取到的字符
StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
int n;// 每次读取到的字符长度
while ((n = isr.read(bb)) != -1) {
sb.append(new String(bb, 0, n));
}
isr.close();// 关闭输入流,释放连接
System.out.println(sb);
}
/**
* 没有进行字符编码的指定,因此只适合程序生成的文本文件的读取。
* 好处:代码少写几行,但不通用。
* @throws IOException
*/
@Test
public void readTest() throws IOException {
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 指定要读取的文件
FileReader fr=new FileReader(file);
// System.out.println(fr.getEncoding());
char[] bb = new char[1024];// 用来保存每次读取到的字符
StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
int n;// 每次读取到的字符长度
while ((n = fr.read(bb)) != -1) {
sb.append(new String(bb, 0, n));
}
fr.close();// 关闭输入流,释放连接
System.out.println(sb);
}
/**
* 往文件里写入数据.
* @throws IOException
*/
@Test
public void writeTest() throws IOException {
String writerContent = "hello world,你好世界";// 要写入的文本
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 要写入的文本文件
if (!file.exists()) {// 如果文件不存在,则创建该文件
file.createNewFile();
}
FileWriter writer = new FileWriter(file);// 获取该文件的输出流
System.out.println(writer.getEncoding());
// 写内容 ,默认使用writer.getEncoding()进行写入,不会出现乱码,因为得到的文件的编码便是写入的编码
writer.write(writerContent);
writer.flush();// 清空缓冲区,立即将输出流里的内容写到文件里
writer.close();// 关闭输出流,施放资源
}
}
2.字节流的读写+不加BufferedInputStream/OutputStream
public class ByteIOTest {
/**
*
* 将D盘下的D:\\xxx.ico文件,读取后,再存到E盘下面.
*
* @param args
* @throws Exception
*/
@Test
public void imageIOTest(String[] args) throws Exception {
FileInputStream in = new FileInputStream(new File("D:\\xxx.ico"));// 指定要读取的图片
File file = new File("E:\\test.jpg");
if (!file.exists()) {// 如果文件不存在,则创建该文件
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(new File("E:\\yuanwang.ico"));// 指定要写入的图片
int n = 0;// 每次读取的字节长度
byte[] bb = new byte[1024];// 存储每次读取的内容
while ((n = in.read(bb)) != -1) {
out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
}
out.close();// 关闭输入输出流
in.close();
}
}
3.字符流的读写+加BufferedReader/Writer
public class BufferCharIOTest {
/**
* 考虑到编码问题-转换流读取,即字节流->字符流
windows系统下默认编码为gbk,即所读取文本为gbk编码。
因此如果myeclipse的默认是utf-8编码的话则读取中文时会出现乱码
情况,utf8 中文会默认3个字节,而gbk 中文默认2个字节。
一个字符在不同编码的情况下,其所对应的字节数是不相同,字符有中文字符,英文字符,数字字符等等
* @throws FileNotFoundException
* @throws IOException
*/
@Test
public void readChangeTest() throws FileNotFoundException, IOException {
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
// 获得该文件的缓冲输入流
//BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
InputStreamReader isr=new InputStreamReader(bis, "gbk");
char[] bb = new char[1024];// 用来保存每次读取到的字符
StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
int n;// 每次读取到的字符长度
while ((n = isr.read(bb)) != -1) {
sb.append(new String(bb, 0, n));
}
isr.close();// 关闭输入流,释放连接
System.out.println(sb);
}
/**
* 没有进行字符编码的指定,因此只适合程序生成的文本文件的读取。
* 好处:代码少写几行,但不通用。
* @throws IOException
*/
@Test
public void readTest() throws FileNotFoundException, IOException {
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
// 获得该文件的缓冲输入流
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String line = "";// 用来保存每次读取一行的内容
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();// 关闭输入流
}
/**
* 在写入过程中,不需要考虑编码问题,
* 因为生成的文件文本的编码会与写入编码一致。因此不会出现乱码情况
*
* @throws IOException
*/
@Test
public void writeTest() throws IOException {
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 指定要写入的文件
if (!file.exists()) {// 如果文件不存在则创建
file.createNewFile();
}
// 获取该文件的缓冲输出流
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
// 写入信息
bufferedWriter.write("你好世界");
bufferedWriter.newLine();// 表示换行
bufferedWriter.write("hello world");
bufferedWriter.flush();// 清空缓冲区
bufferedWriter.close();// 关闭输出流
}
}
4.字节流的读写+加BufferedInputStream/OutputStream
public class BufferByteIOTest {
public void imageIOTest(String[] args) throws Exception {
// 指定要读取文件的缓冲输入字节流
BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\xx.jpg"));
File file = new File("E:\\xx.jpg");
if (file != null) {
file.createNewFile();
}
// 指定要写入文件的缓冲输出字节流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
byte[] bb = new byte[1024];// 用来存储每次读取到的字节数组
int n;// 每次读取到的字节数组的长度
while ((n = in.read(bb)) != -1) {
out.write(bb, 0, n);// 写入到输出流
}
out.close();// 关闭流
in.close();
}
}
java+++IO流操作的更多相关文章
- Java IO流操作汇总: inputStream 和 outputStream【转】
我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...
- Java IO流操作 (I)
1.FileWriter 写数据---输出流---由控制台向文件中写数据 import java.io.FileWriter; import java.io.IOException; /* * 写数据 ...
- Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)
1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...
- Java IO流操作 (II)
缓冲流 /* * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入. * BufferedReader:从字符输入流中读取文本,缓冲各个字符, ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java IO流 之 其他流
一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一). public class ByteArrayInputStream extends ...
随机推荐
- 动态加载css方法实现和深入解析
一.方法引用来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析). 因为公司项目需要用到懒加载来提高网站加载速度,所以将非首屏渲染必需 ...
- Hadoop学习笔记-003-CentOS_6.5_64_设置ssh免密码登录
参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...
- [css]《css揭秘》学习(二)-多重边框
一.box-shadow属性 box-shadow除了生成投影,还可以用来生成边框:它接受第4个值作为扩张半径,0的x轴偏移+0的y轴偏移+0的模糊值+0的扩张半径,得到的显示效果和边框是一样的:但是 ...
- spring 定时任务 taskScheduler详解
spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态.也可以使用cron表达式设置定时任务. 被执行的类要实现Runnable接口 TaskSche ...
- (3)activiti流程的挂起和激活
有时候,我们需要对一个已经执行的流程进行暂停,而不是删除它,这个时候就需要我们调用activiti暂停和激活的api来操作他们 每启动一个流程实例,都会在该流程实例下产生相应的流程任务,处于1*多的关 ...
- 【easyui】之treegrid的分页
easyui官网给的treegrid的分页是相当的复杂,我们来简化一下! 首先treegrid 分页和 datagrid一样需要设置一系列参数! 如下: depTreeGrid=$("#de ...
- svg学习之旅(1)
Canvas 与 SVG 的比较 下表列出了 canvas 与 SVG 之间的一些不同之处. Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果 ...
- Java Web(二) Servlet中response、request乱码问题解决
三月不减肥,五月徒伤悲,这就是我现在的状态,哈哈~ 健身.博客坚持. --WH 一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, M ...
- TCP报文段的首部格式
首部20个字节的的固定部分,40个字节的可选部分 (1)源端口和目的端口 (2)序号(是字节流的编号,0-2^32-1),如果超过了mod2^32 (3)确认号:目的主机希望源主机收到的下一个字节序号 ...
- ImageSpan图片不能居中的问题
点击下载:MyImageSpan.txt 使用ImageSpan的童鞋应该都会遇到这样一个困惑,图片不能居中显示,ImageSpan中只有ImageSpan.ALIGN_BASELINE与ImageS ...