IO学习二(节点流)
1.流的分类
按照数据流向的不同:输入流和输出流
按照处理数据的单位不同:字节流((非文本文件)视频、音频、图像)、字符流(文本文件)
按照角色的不同:节点流和处理流
2.IO体系
抽象基类 节点流 缓冲流(处理流的一种,可以提高文本操作的效率)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
public class FileInputOutputStream {
// 从硬盘中存在的文件,读取内容加载到程序中,FileInputStream
// 要读取的文件一定要存在,否则抛一个异常FileNotFoundException
@Test
public void testFileInputStream1() throws Exception{
// 1、创建一个File类的对象
File file = new File("hello.txt");
// 2、创建一个FileInputStream类的对象
FileInputStream fis = new FileInputStream(file);
// 3、调用FileInputStream中的方法,实现file文件的读取
// read()方法:可以读取文件中的一个字节 当执行到文件结尾时,返回-1
/* int b = fis.read();
// 判断有没有读取到文件结尾
while(b!=-1){
System.out.println((char)b);
b = fis.read();
}*/
int b;
while((b=fis.read())!=-1){
System.out.println((char)b);
}
// 4、关闭相应的流
fis.close();
}
// 使用try-catch-finally处理异常:保证流的关闭一定可以执行
@Test
public void testFileIntputStream2(){
File file = new File("hello.txt");
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
int b;
while((b=fis.read())!=-1){
System.out.println((char)b);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
// 不管是否发生异常,finally中的代码一定会执行
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 将读取到的数据填充到字节数组中
@Test
public void testFileInputStream3(){
FileInputStream fis = null;
try {
File file = new File("hello.txt");
// 将file对象作为FileInputStream的形参传进来
fis = new FileInputStream(file);
// 读取的数据要写入的数组
byte[] b = new byte[5];
// 每次读入到byte中字节的长度
int len;
while ((len=fis.read(b))!=-1) {
for (int i = 0; i < len; i++) {
System.out.print((char)b[i]);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// FileOutputStream
@Test
public void testFileOutputStream(){
// 1、创建一个File对象,指定要写入的文件位置
// 输出的物理文件也可以不存在,当执行过程中,如果不存在,则自动创建,若存在,则将原来的文件覆盖
File file = new File("hello2.txt");
// 2、创建一个FileOutputStream对象,将file对象作为形参传递给FileOutputStream的构造器。
FileOutputStream fos = null;
try {
fos=new FileOutputStream(file);
// 3、执行写入操作
fos.write(new String("hello").getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
// 4、关闭输出流(释放资源)
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 从硬盘读取一个文件并写入到另一个位置(文件的复制)
@Test
public void testFileInputOutputStream(){
// 1、提供读入、写出的文件
File file1 = new File("hello.txt");
File file2 = new File("hello3.txt");
// 2、提供相应的输入流和输出流
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
byte[] b = new byte[20];
int len;
// 3、实现文件的复制
while ((len=fis.read(b))!=-1) {
System.out.println(len);
// 从头开始写 写的长度是len
fos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 实现文件复制的方法
public static void copyFile(String src,String dest){
// 1、提供读入、写出的文件
File file1 = new File(src);
File file2 = new File(dest);
// 2、提供相应的输入流和输出流
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
byte[] b = new byte[20];
int len;
// 3、实现文件的复制
while ((len=fis.read(b))!=-1) {
// 从头开始写 写的长度是len
fos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void testCopyFile(){
copyFile("1.jpg", "2.jpg");
}
}
public class TestBuffered {
// 使用BufferedInputStream和BufferedOutputStream实现非文本复制
@Test
public void testBufferedInputOutputStream(){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
// 1.提供读写的文件
File file1 = new File("1.jpg");
File file2 = new File("3.jpg");
// 2.创建响应的节点流 FileInputStream FileOutputStream
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
// 3.将创建的节点流对象作为形参传递给缓冲流的构造器
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
// 4.具体实现文件复制的操作
byte[] b = new byte[1024];
int len;
while ((len=bis.read(b))!=-1) {
// 写数据
bos.write(b, 0, len);
// 清除缓存
bos.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 5.释放资源
if (bis!=null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos!=null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void testBufferReader(){
BufferedReader br = null;
BufferedWriter bw = null;
try {
File file = new File("oop.txt");
File file1 = new File("oop2.txt");
FileReader fr = new FileReader(file);
FileWriter fw = new FileWriter(file1);
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
/*char[] c = new char[1024];
int len;
while ((len=br.read(c))!=-1) {
String str = new String(c, 0, len);
bw.write(str);
bw.flush();
}*/
String str;
while ((str=br.readLine())!=null) {
bw.write(str);
bw.newLine();// 自动换行
bw.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (bw!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
IO学习二(节点流)的更多相关文章
- Java IO学习--(二)文件
在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这篇文章不会对每一个技术细节都做出解释,而是会针对文件存取的方法提供给你一些必要 ...
- java io 节点流和处理流
JAVA IO操作总结:节点流和处理流 JAVA IO操作总结--节点流和处理流 按照流是否直接与特定的地方(如磁盘.内存.设备等)相连,分为节点流和处理流两类. 节点流:可以从或向一个特定的地方( ...
- Java IO学习笔记(二)缓冲流
处理流:包在别的流上的流,可以对被包的流进行处理或者提供被包的流不具备的方法. 一.缓冲流:套接在相应的节点流之上,带有缓冲区,对读写的数据提供了缓冲的功能,提高读写效率,同时增加一些新的方法.可以减 ...
- JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...
- Java IO 节点流 ByteArrayInput/OutputStream
Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Java IO学习笔记(三)转换流、数据流、字节数组流
转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...
- Java基础—IO小结(一)概述与节点流
一.File类的使用 由于file类是一个基础类,所以我们从file类开始了解.(SE有完善的中文文档,建议阅读) 构造器: 常用方法:——完整方法请参见API API API!!! File做的是 ...
- JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
IO流根据处理对象的不同分为节点流和处理流. 直接对文件进行处理的流为节点流: 对流进行包装从而实现对文件的优化处理的流为处理流. 节点流类型: 可以看出,节点流主要分这几大类: 文件流 文件流构造方 ...
随机推荐
- ruby-attr_accessor使用
ruby语法-attr_accessor方法使用 本文主要讲解下ruby下attr_accessor方法的使用. 示例1: class Person end person = Person.new p ...
- linux下 几个常用makefile模板,亲测可用
一 生成动态链接库的模板: ####################### # Makefile ####################### # compile and lib parameter ...
- Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 在前面一篇文章 ...
- C# 在窗体上可拖动控件
最近做了一个标签打印配置功能,需要根据客户需求自定义标签格式.显示内容,这时就用到了后台生成控件,并且其控件可在窗口中进行拖动,这里仅为记录一下实现过程,方便以后使用. 结果图: 源码: using ...
- android WebView详解,常见漏洞详解和安全源码
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 转载请注明出处:http://blog.csdn.net/se ...
- parseInt和map方法使用案例分析
["1","2","3"].map(parseInt) //[1,NaN,NaN] 先看map()方法 定义和用法 map() 方法返回一个 ...
- PHP Socket 编程进阶指南
学习准备 Linux 或者 Mac 环境: 安装有 Sockets 扩展: 了解 TCP/IP 协议. socket函数只是PHP扩展的一部分,编译PHP时必须在配置中添加 --enable-sock ...
- clion调试postgresql
clion怎么调试postgresql呢? clion使用cmake去编译项目的,但是大家编译postgresql用的是make.虽然项目中也有CMakeLists.txt文件,但是cmake会报错, ...
- curl模拟post json或post xml文件
转自: https://www.cnblogs.com/xiaochina/p/9750851.html 问题描述: Linux用命令模拟接口,对接口判断!post文件xml/json 问题解决: c ...
- Coder解压探索===冥想补蓝v.1.0
主题是什么? 这是一篇是我自己在探索冥想术的过程中,有了一些浅薄的收获,所以写出来记录与分享. 我不太记得最早是因为什么原因去学习冥想,一开始对我而言,这个词带有很多成见,诸如“老僧入定”“三界六道” ...