IO流(三)__字节流 标准输入输出流 转换流
一、字节流:FileInputStream 和FileOutputStream
基本操作和字符流类相同,没有flush,但是close还是要的
复制一个字节流文件
private static void copy_1() throws IOException {
FileInputStream fis=new FileInputStream("d://17-网络编程(TCP协议-练习-上传图片客户端).avi");
BufferedInputStream bufis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("d://2.avi");
BufferedOutputStream bufos=new BufferedOutputStream(fos); /*byte[] buf =new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
fos.write(buf);*/
int ch=0;
while((ch=bufis.read())!=-1){
bufos.write(ch);
}
fos.close();
fis.close();
}
int len=fis.available() 获得可读取的字节数
private static void demo_read() throws IOException {
FileInputStream fis=new FileInputStream("demo.txt");
byte[] buf=new byte[fis.available()];//获取文件大小,但是如果文件过大就会出现溢出
fis.read(buf);
System.out.println(new String(buf) );
}
二、system.in 和system.out—标准输入输出流InputStream OutputStream
阻塞的意思就是说: 程序一直停在read()方法这里,等待数据。没有数据就不继续往下执行,至到得到数据。
何谓标准输入输出的呢?就是我们最常见的,一般都是命令行窗口,System.in负责从健盘输入,System.out负责从命令窗口输出
private static void readKey() throws IOException {
InputStream in=System.in;
int ch=in.read();//阻塞式方法
System.out.println(ch);
int ch1=in.read();//阻塞式方法
System.out.println(ch1);
int ch2=in.read();//阻塞式方法
System.out.println(ch2); //in.close();//系统流不要关闭,关闭之后就不能再打开 /*InputStream in2=System.in;
int ch3=in2.read();
System.out.println(ch3);*/ }
练习:获取用户键盘录入的数据,并将数据变成大写显示在控制台上,如果用户输入的是over,结束键盘录入。
思路:
*1.因为键盘录入只读取一个字节,判断是否是over
*需要将读取到的字节拼成字符串,
*2.那就需要一个容器。StringBuilder
*3.在用户回车之前将录入的数据变成字符串判断即可
private static void readKey2() throws IOException {
//1.创建容器
StringBuilder sb=new StringBuilder();
//2.获取键盘读取流
InputStream in=System.in;
//3.定义变量记录读取到的字节,并循环获取 int ch=0;
while((ch=in.read())!=-1){
//在存储之前需要判断是否是换行标记,因为换行标记不存储
if(ch=='\r')
continue;
if(ch=='\n'){
String temp=sb.toString();
if("over".equals(temp))
break;
System.out.println(temp.toUpperCase());
sb.delete(0,sb.length());
}
else
sb.append((char)ch); }
}
注意:\r \n在windows下都是换行控制符。在此程序中交换\r和\n没有影响。
三、转换流
什么时候使用转换流?
1.源或者目的对应的设备是字节流。但是操作的确实文本数据,可以使用转换作为桥梁提高对文本操作的便捷
2.一旦操作文本设计具体的指定编码表时,必须使用转换流。
public class TransStreamDemo { public static void main(String[] args) throws IOException {
//字节流
InputStream in= System.in;
//将字节流转成字符的桥梁。转换流
InputStreamReader isr=new InputStreamReader(in);
//缓冲字符流
BufferedReader buff=new BufferedReader(isr);
String line=null;
while((line=buff.readLine())!=null){
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
}
}
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk_1.txt"),"GBK");
FileWriter fw=new FileWriter("gbk_1.txt");
* 这两句代码的功能是等同的
* FileWriter:其实就是转换流指定了本机默认码表的体现。而且这个转换流的子类对象,可以方便操作文本文件
* 简单说:操作文件的字节流+本机默认的编码表
* 这就是按照默认码表来操作文件的便捷类。
* 如果文本文件需要明确具体的码表,FileWriter就不行了。必须用转换流。
练习:
* 1.需求:将键盘录入的数据写入到一个文件当中
* 2.需求:讲一个文本文件内容显示在控制台上
* 3.需求:将一个文本文件中的内容复制到另一个文件中
public class TransStreamDemo2 {
public static void main(String[] args) throws IOException {
//1.需求:将键盘录入的数据写入到一个文件当中
/*BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
*/
//2.需求:讲一个文本文件内容显示在控制台上
/*BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));*/
//3.需求:将一个文本文件中的内容复制到另一个文件中
BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"))); String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
} } }
IO流(三)__字节流 标准输入输出流 转换流的更多相关文章
- Java IO流详解(六)——转换流
转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...
- java IO之 编码 (码表 编码 解码 转换流)
编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a 1 等字符 计算机中是没有存储字符的,但是我们却看到了.计算机在存储这些信息的时候,根据一个有规 则 ...
- Java - io输入输出流 --转换流
转换流 转换输出流 OutputStreamWriter: 说明: /* * OutputStreamWriter 这个类的作用 * 就是指定输出流的编码格式 * 这个类的构造方法 需要传递 一个输 ...
- Java第三十三天,IO操作(续集),字符转换流
计算机都是以二进制码格式存储文件的,但是在读写文件的过程中,每个应用程序都有自己的编码格式.FileWrite和FileRead类是通过查询系统默认码表进行读写的,因此在自己的系统上能够实现编码的智能 ...
- Java IO(三)——字节流
一.流类 Java的流式输入/输出是建立在四个抽象类的基础上的:InputStream.OutputStream.Reader.Writer.它们用来创建具体的流式子类.尽管程序通过具体子类执行输入/ ...
- java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
1. File类
- Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)
关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...
- 15、IO (转换流、缓冲流)
转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的 ...
- JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...
随机推荐
- jquerymobile仿微信 - 01
jquerymobile仿微信 - 01 jquerymobile的组件感觉不咋地哇 本地调试最好是开一个web server,不然数据访问会有问题 <div data-role="p ...
- Android中的Activity相关知识总结
一.什么是Activity? 简单理解:Activity是Android组件中最基本也是最为常见用的四大组件之一.是一个与用户交互的系统模块,一个Activity通常就是一个单独的屏幕(页面), 它上 ...
- XML学习笔记7——XSD实例
在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改),也就是说,是 ...
- Android开发之时间日期2
昨天给大家分享了一个时间和日期设置的小例子,今天发现Android的布局组件中有关于时间和日期的设置的组件,废话不多说,先给大家分享一下我的经验. 时间日期设置组件:TimePicker.DatePi ...
- poj3342Party at Hali-Bula(树形dp)
/* 树形dp! 判重思路: 当dp[v][0]==dp[v][1]时,很自然,flag[u][0]必然是有两种方案的.flag[u][1]则不然, 因为它只和dp[v][0]有关系.而若flag[v ...
- poj 3352Road Construction(无向双连通分量的分解)
/* 题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为强连通图(指的是边强联通). 思路:利用tarjan算法找出所有的双联通分量!然后根据low[]值的不同将双联通分量 进行缩点,最后图 ...
- 邻接矩阵无向图(二)之 C++详解
本章是通过C++实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...
- Unity3D 游戏前端开发技能树(思维导图)
如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接:http://pan.baidu.com/s/1eSHpH5o 密码:qzl5) 最近要用思维导图软件Xmind把自己的思路 ...
- C/C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- Robot Framework自动化测试(六)--- robotremoteserver使用
robotremoteserver 是什么? Python Remote Server for Robot Framework 下载地址:https://pypi.python.org/pypi/ro ...