Java基础——iO(一)
此文为了解IO知识的基础篇,这块我看了几天,感觉和前段时间学习集合一样,零散又重要。想记录一下这块由浅入深的学习过程。所以,接下来会记录几篇学习笔记,之后会有以前深入总结。因为这块比较重要啊,所以一定要学好。
一、IO的概述
IO: (Input Output)
--- 什么是流:
一组有顺序的、有起点和终点的数据集合,如文件流、网络流
--- 流与文件的区别:
文件是数据的静态存储方法。流是数据在传输时的一种形态。
java 对数据的操作都是通过流的方式,java 用于操作流的对象都在IO包中。
流按操作数据分为:
字节流(InputStream、OutputStream) 和 字符流(Reader、Writer)
其他所有的IO操作的类都是有它 们派生出来的
凡是属于字节流的 都是以 InputStream , OutputStream 为结尾,比如 FileInputStream, FileOutputStream 等
凡是属于字符流的,都是以 Reader , Writer 为结尾 比如 FileReader, PrintWriter 等
流按流向分为:
输入流和输出流
二、字符流 Writer
字符流的结构(只以输出流为例)
Writer -- BufferedWriter
CharArrayWriter
OutputStreamWriter --FileWriter
FilterWriter //过滤流
PipedWriter //管道流
StringWriter
//例一 创建一个文件,写入一些内容
static void test() throws IOException{
Writer wr=new FileWriter("c:/1.txt"); //把原来的内容覆盖了
wr.write("这是一行文本");
wr.write("\r\n"); //写入换行符
wr.write("这是第二行文本"); //写到缓冲区中了
wr.flush(); //刷新缓冲区
wr.close(); //流使用完,一定要关闭
} //FileWriter(String fileName, boolean append)
static void test2()throws IOException{
Writer wr=new FileWriter("c:/1.txt",true); //可以给第二个参数传true,表示以追回的方式写入
wr.write("这是追加方式写入的内容");
//wr.flush(); 有下面的close,这里不flush也可以
wr.close();
}
三、标准的IO异常处理
代码示例:
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List; //把一份名单写入文件
class Test16 {
public static void main(String[] args) { List<String> nameList = new ArrayList<String>();
nameList.add("PHP");
nameList.add("Java");
nameList.add("C#");
nameList.add("C++"); Writer wr = null;
try {
wr = new FileWriter("名单.exe");
for (String name : nameList) {
wr.write(name + "\r\n");
}
} catch (Exception ex) {
throw new RuntimeException(ex);
} finally {
try {
if (wr != null) {
wr.close();
}
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}
} // 关键点,要在finally 中关闭资源,关闭的时候,不要忘了判断这个资源是不是null
四、字符流 Reader
//例子,从文件中读取数据
int read() 读取单个字符 //返回的是这个字符的编码值
int read(char[] cbuf) 将字符读入数组 //返回值是读到的字符个数,如果读到了末尾,返回-1(-1这个性质经常用到)
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
//从文件读取数据 (本例是一个字符一个字符的方式读的)
static void test4() throws IOException {
Reader r=new FileReader("C:/名单.txt");
int ch=0;
while(( ch=r.read()) !=-1 ){
System.out.println((char)ch);
}
}
//从文件读取数据 ,做为了一个符串打印出来
static void test5() throws IOException {
Reader r=new FileReader("C:/1.txt");
char [] buff=new char[1024];
int count=r.read(buff);
String str=new String(buff,0,count);
System.out.println(str);
r.close();
}
//例子 文件复制 ,把C盘上的某个文件复制到E盘
//这样的复制是将字符一个一个的复制,很显然,它的效率比较低!
Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");
//注意:路径的反斜杠要用转义
Writer w=new FileWriter("E:\\desc.txt");
int ch=0;
while( (ch= r.read())!=-1 ){
w.write(ch);
}
r.close();
w.close()
既然,有一个一个的复制,我们会想,怎么样才能让复制的效率变得更加高效呢?
我们可以定义一个容器,用它去块一块的去复制,效率就会更高了。下面是图形说明:
代码示例:
Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");
Writer w=new FileWriter("E:\\desc.txt");
char [] buff=new char[1024];//定义一个容器
//定义容器之后,会发生一些情况,比如取了几次以后,剩下部分的容量少于定义的容器的容量,这时候让它再去一次势必会有空余的空间被占位。这不是我们想要的,所以就引出下面这个含参的取法。
int len=0;
while( (len= r.read(buff))!=-1 ){
w.write(buff,0,len);
}
r.close();
w.close();
关于IO的知识确实蛮多的,下篇待续咯......
Java基础——iO(一)的更多相关文章
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
随机推荐
- nginx-2.nginx是什么
Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器: Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以 ...
- 阿里云ECS 介绍
1.阿里云产品概述 1 2.阿里云基础架构介绍 2 3. ECS产品概念和功能 6 4. ECS运维管理和API 12 1.阿里云产品概述 2.阿里云基础架构介绍 ECS 主要有五个主要的组成部分 作 ...
- [学习笔记]区间dp
区间 \(dp\) 1.[HAOI2008]玩具取名 \(f[l][r][W/I/N/G]\) 表示区间 \([l,r]\) 中能否压缩成 \(W/I/N/G\) \(Code\ Below:\) # ...
- 16_python_面向对象
一.面向对象和面向过程的区别 1.面向对象:一切以对象为中心.有相同属性和动作的结合体叫做对 优点:易维护.易复用.易扩展,由于面向对象有封装.继承.多态性的特性 ...
- 程序猿的日常——Mybatis现学现卖
最近有一个小项目需求,需要用spring mvc + mybatis实现一个复杂的配置系统.其中遇到了很多不太常见的问题,在这里特意记录下: 主要涉及的内容有 事务 多表删除 插入并返回主键 1 sp ...
- C#6.0语言规范(七) 表达式
表达式是运算符和操作数的序列.本章定义了操作数和运算符的语法,求值顺序以及表达式的含义. 表达式分类 表达式分类为以下之一: 一个值.每个值都有一个关联的类型. 一个变量.每个变量都有一个关联的类型, ...
- python -猜字小游戏
代码运行效果如下: 注意: 1.必须要在python3环境想使用 2.QQ:3084276329(一起交流学习) 3.还请大家评论 Guess the word game代码如下: #! /usr/b ...
- Node.js中的模块接口module.exports浅析
在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.这里作者对此做了个简单 ...
- spring cloud开发、部署注意
一.开发时,配置服务的配置使用本地路径,不使用svn和git,因为后者每个开发人员都会修改配置,导致别人也拿到其他人修改的配置,本地配置示例如下: spring: application: name: ...
- Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...