IO流技术
IO流常用基类
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer
Writer类
子类:BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter
FileWriter extends OutputStreamWriter
FileWriter(String filenme,boolean append)
如果append为true,则将字节写入文件末尾处,而不是写入文件开始处。
public static void main(String[] args) {
FileWriter fr=null;
// TODO Auto-generated method stub
try {
fr= new FileWriter("demo.txt");
fr.write("hello,world!");
fr.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(fr!=null)
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
FileReader的两种读取方式
fr = new FileReader("demo.txt");
int c=0;
while((c=fr.read())!=-1){
System.out.print((char) c);
}
char [] buf= new char[1024];
try {
fr = new FileReader("demo.txt");
int c=0;
while((c=fr.read(buf))!=-1){
System.out.print(new String(buf,0,c));
}
}
复制功能的实现
char [] buf= new char[1024];
try {
fr = new FileReader("demo.txt");
fw = new FileWriter("dest.txt");
int c=0;
while((c=fr.read(buf))!=-1){
fw.write(buf, 0, c);
}
}
BufferedWriter,BufferedReader
bufferedWriter的用法
private static FileWriter fw;
private static BufferedWriter bw;
public static void main(String[] args) {
try {
fw=new FileWriter("buffered.txt");
bw=new BufferedWriter(fw); bw.write("hello,lvjy");
bw.newLine();
bw.write("hello,world");
bw.flush();
bufferedReader的readLine()方法不包含任何行终止符
LineNumberReader
setLineNumber()和getLineNumber()
字节流:InputStream,OutputStream
想要操作图片数据,这时就要用到字节流
FileInputStream
available()方法返回可读取的字节数
byte[] buf=new byte[fis.available()];定义一个刚刚好缓冲区,不需要再用循环了
字节流缓冲区:BufferedInputStream,BufferedOutputStream
读取键盘录入:
System.out:对应的是标准输出设备,控制台。
System.in:对应的的是标准输入设备,键盘。
package com.travelsky.io; import java.io.IOException;
import java.io.InputStream; public class ReadIn { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStream in = System.in;
StringBuilder sb=new StringBuilder();
while(true){
int c=in.read();
if(c=='\r')
continue;
if(c=='\n'){
String s=sb.toString();
if("over".equals(s)){
break;
}
System.out.println(s.toUpperCase());
sb.delete(0, sb.length());
}else{
sb.append((char)c);
}
}
} }
InputStreamReader转换流
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStream in = System.in;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while(true){
String line = br.readLine();
if("over".equals(line)){
break;
}else{
System.out.println(line.toUpperCase());
}
}
}
流操作的基本规律
通过两个明确来完成:
1.明确源和目的
源:输入流——InputStream,Reader
目的:输出流——OutputStream,Writer
2.操作的数据是否为纯文本
是:字符流
否:字节流
3.当体系明确后,再明确要使用哪个具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
OutputStreamWriter可以进行字节编码方式的转换
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("filename.txt"),"UTF-8");
字符和字节编解码相关内容
public byte[] getBytes(String charsetName)
使用指定的字符集将此String编码为byte序列,结果存在一个byte数组中
public String(byte[] bytes, String charsetName)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
在网络传输中,信息都是以字节序列的方式传输的。所以,发送方的String要按照某种编码方式(如UTF-8,GBK)编码为字节序列,在网络中传输后,接收方取得这个字节序列,按照相同的编码方式将字节序列解码为String。
改变标准输入输出设备:
System.setIn(InputStream in)
System.setOut(PrintStream out)
获取系统信息
public class ReadIn { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Properties props=System.getProperties();
props.list(System.out);
} }
IO流技术的更多相关文章
- java IO流技术 之 File
IO流技术 概念:input - output 输入输出流: 输入:将文件读到内存中: 输出:将文件从内存中写出到其他地方 作用:主要就是解决设备和设备之间的数据传输问题. File :文件类的使用十 ...
- java基础43 IO流技术(输入字节流/缓冲输入字节流)
通过File对象可以读取文件或者文件夹的属性数据,如果要读取文件的内容数据,那么我们就要使用IO技术. 一.输入字节流 输入字节流的体系: -------| InputStream:所有输入字节流的 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- Java之IO流技术详解
何为IO? 首先,我们看看百度给出的解释. I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分. i是写入,Input的首字母.o是输出,Output的首字母. IO 也称为 ...
- java基础53 IO流技术(转换流)
1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流 2.输出字节流的转换流:OutputStreamWriter是字符 ...
- java基础51 IO流技术(打印流)
1.打印流(printStream)的概念 打印流可以打印任意的数据类型 2.printStream的步骤 1.找到目标文件 2.创建一个打印流 3.打印信息 4.关闭资源 3.实例 ...
- java基础48 IO流技术(序列流)
本文知识点目录: 1.SequenceInputStream序列流的步骤 2.实例 3.附录(音乐的切割与合并) 1.SequenceInputStream序列流的步骤 1.找到目标文件 ...
- java基础46 IO流技术(输出字符流/缓冲输出字符流)
一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类) ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...
- java基础45 IO流技术(输入字符流/缓冲输入字符流)
一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类) ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...
随机推荐
- Mysql 集合链接查询
MySQL NULL 值处理 需求:我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. ...
- 时间序列数据库调研之InfluxDB
基于 Go 语言开发,社区非常活跃,项目更新速度很快,日新月异,关注度高 测试版本 1.0.0_beta2-1 安装部署 wget https://dl.influxdata.com/influxdb ...
- redhat6.4提权Ⅱ
本次演示只针对redhat6.4, 其他的系统不知道有没有效果. 下面开始吧 建立普通用户并授予密码 [root@localhost yum.repos.d]# useradd test [root@ ...
- mysql的并发控制
并发即指在同一时刻,多个操作并行执行.MySQL对并发的处理主要应用了两种机制——是"锁"和"多版本控制". 1.并发控制 MySQL提供两个级别的并发控制:服 ...
- [c/c++] programming之路(22)、字符串(三)——字符串封装
项目结构 头文件.h #include<stdio.h> #include<stdlib.h> #include<string.h> //字符串封装,需要库函数 / ...
- while(scanf("%d %d",&a,&b)!=EOF)
scanf("%d %d",&a,&b)返回输入的数据和格式字符串中匹配次数.当dos或windows中输入ctrl+z(模拟文件结束符EOF)时,scanf返回E ...
- 类自动调用to.string方法
所有对象都有toString()这个方法,因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法” 它通常只是为了方便输出,比如System.out.prin ...
- js前端文件收集(一)
1.保存cookies的文件: /** * Cookie plugin * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual license ...
- 622 CircularQueue C#
public class MyCircularQueue { int[] Queue=null; int _Front = 0; int _Rear = 0; int Length = 0; int ...
- CSS【06】:CSS显示模式
div和Span标签 作用:一般用于配合css完成网页的基本布局 <style> .header{ width: 980px; height: 100px; background: red ...