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流技术的更多相关文章

  1. java IO流技术 之 File

    IO流技术 概念:input - output 输入输出流: 输入:将文件读到内存中: 输出:将文件从内存中写出到其他地方 作用:主要就是解决设备和设备之间的数据传输问题. File :文件类的使用十 ...

  2. java基础43 IO流技术(输入字节流/缓冲输入字节流)

    通过File对象可以读取文件或者文件夹的属性数据,如果要读取文件的内容数据,那么我们就要使用IO技术. 一.输入字节流 输入字节流的体系:  -------| InputStream:所有输入字节流的 ...

  3. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  4. Java之IO流技术详解

    何为IO? 首先,我们看看百度给出的解释. I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分. i是写入,Input的首字母.o是输出,Output的首字母. IO 也称为 ...

  5. java基础53 IO流技术(转换流)

    1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流    2.输出字节流的转换流:OutputStreamWriter是字符 ...

  6. java基础51 IO流技术(打印流)

    1.打印流(printStream)的概念 打印流可以打印任意的数据类型 2.printStream的步骤 1.找到目标文件    2.创建一个打印流    3.打印信息    4.关闭资源 3.实例 ...

  7. java基础48 IO流技术(序列流)

    本文知识点目录: 1.SequenceInputStream序列流的步骤    2.实例    3.附录(音乐的切割与合并) 1.SequenceInputStream序列流的步骤 1.找到目标文件  ...

  8. java基础46 IO流技术(输出字符流/缓冲输出字符流)

    一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类)  ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...

  9. java基础45 IO流技术(输入字符流/缓冲输入字符流)

    一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类)  ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...

随机推荐

  1. Python3 pip命令报错:Fatal error in launcher: Unable to create process using '"'

    Python3 pip命令报错:Fatal error in launcher: Unable to create process using '"' 一.问题 环境:win7 同时安装py ...

  2. 使用Java或 JavaScript获取 方括号中的内容

    1.使用Java获取方括号中的内容 String str = "[你]们,[我]们,[他]们,都要[好好学习,天天敲代码]"; Pattern p = Pattern.compil ...

  3. JavaScript test() 方法

    JavaScript test() 方法 JavaScript RegExp 对象 定义和用法 test() 方法用于检测一个字符串是否匹配某个模式. 语法 RegExpObject.test(str ...

  4. CSS的再深入5(更新中···)

    页面布局 结构层:搭我们的页面框架. 布局层:针对框架内部结构进行排版. 不需要使用浮动解决的问题尽量不用. 使用浮动之后会使该元素脱标,并且该元素的margin. div 盒子模型 : 就是一个容器 ...

  5. CPU高速缓存

    目录 Code: 物理结构: 缓存行Cache Line 伪共享: 概念: 解决办法: 内存屏障: 理解: 参考: Code: public class Main { static long[][] ...

  6. Learning-MySQL【6】:视图、触发器、存储过程、函数、流程控制

    一.视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可.使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的 SQL 语句了 ...

  7. eclipse下的mybatis插件:MyBatipse

    MyBatipse:Eclipse 下的 Mybatis插件 MyBatipse是Eclipse的一个插件,提供了内容提示和Mybatis的配置文件验证功能: 特点 XMLEditor 的增强 代码自 ...

  8. java基础 (二)之HashMap,HashTable,ConcurrentHashMap区别

    HashTable: put方法加了同步锁synchronized,底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable, ...

  9. R 导出pdf设置字体

    主要参考自: https://blog.csdn.net/xmuecor/article/details/51462172 library(showtext)showtext.auto(enable ...

  10. tar命令-压缩,解压缩文件

    tar: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 上面五个参数是独立的,压缩解压都要用到其中一个,可以和下面的命令连用但只能用其 ...