IO

文章目录

  • IO
    • 1.方法
    • 2.各种流:
      • 输入流:InputString(抽象类)
      • 输出流:OutputString(抽象类)
      • 字节流:文件复制
      • 字符流:文件复制FileReader/FileWriter
      • 自带缓冲区的字符流BufferedReader/BufferedWriter
      • 二进制流DataInputStream/DataInputStream
    • 装饰模式:IO设计的核心思想

InputStream :输入流

OutStream:输出流

1.方法

package IOProject;import java.io.File;
import java.io.IOException;public class Demo01 {public static void main(String[] args) {//file:文件、目录、不存在的文件或者目录File file = new File("d:/abc.txt");//文件分隔符自适应// File file = new File("d:"+File.separator+"abc.txt");        System.out.println("相对路径"+file.getPath());System.out.println("绝对路径"+file.getAbsolutePath());System.out.println("文件名称"+file.getName());System.out.println("文件的大小"+file.length());//单位字节System.out.println( file.isFile()==true? "文件":"非文件");System.out.println( file.isDirectory()==true? "目录":"非目录");if(file.exists()){彻底删除(不过回收站)file.delete();System.out.println("删除成功");}else{try {file.createNewFile();System.out.println("创建成功");} catch (IOException e) {e.printStackTrace();}}}
}

相对路径/绝对路径

  • 如果file new 的是(“绝对路径”)那么getPath()和getAbsolutePath()的结果一致,打印的都是绝对路径
  • 如果file new 的是(“相对路径”)getPath()打印相对路径。getAbsolutePath()打印绝对路径(电脑中真实的存在路径)

流:是一种FIFO(First In First Out)的数据结构

2.各种流:

  • 字节流

FileInputStream/FileOutputStream:字节流就是将内容转为了字节形式进行传输,字节->8二进制

二进制可以传输任何类型的数据,因此字节流也可以传输任何类型的数据(文件、图片、压缩包)

  • 字符流

只能传输字符文件

  • 其他流

说明:1.字节流就是 将内容转为了字节形式进行传输, 1 字节 ->8二进制 ,二进制可以传输任何类型的数据,因此字节流也可以传输任何类型的数据。

2.字节流是8位通用字节流( 1 字节 ->8二进制 ) (字节流可以处理任何类型,处理文本文件以外的其他文件) ;字符流是16位的unicode字符流 (只用于处理字符,处理文本文件)

3.在while循环中 分批次传输时,字节流使用的缓冲区是 byte[],字符流使用的缓冲区是 char[]

输入流:InputString(抽象类)

package IOProject;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IoInputStream {public static void main(String[] args) {InputStream in = null;try {in =  new FileInputStream(new File("d:/abc.txt"));//文件的大小in.available()System.out.println(in.available());byte[] buf = new byte[in.available()];//将文件内容读取到bufin.read(buf);//buf.byte[]-->String//字节数组转换成字符串System.out.println( new String(buf));}catch (Exception e){e.printStackTrace();}finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}
}

输出流:OutputString(抽象类)

package IOProject;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class OutputStreamDemo {public static void main(String[] args) {OutputStream out = null;try {out = new FileOutputStream("d:/xyz.txt");try {//内存-->往xvy.txt输出//getBytes()方法把字符串转成字节out.write("sdwrerewrwe231".getBytes());} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();}finally {try {out.close();} catch (IOException e) {e.printStackTrace();}}}
}

字节流:文件复制

import java.io.*;public class FileCopy {//abc.txt->内存->xyz.txtpublic static void main(String[] args) {InputStream in = null ;OutputStream out = null ;try {//abc.txt->内存in = new FileInputStream("d:/abc.txt") ;out = new FileOutputStream("d:/xyz.txt") ;//开辟10字节的内存byte []buf = new byte[10] ;int len = -1 ;;while(   (len= in.read(buf)) != -1){//in ->buf//  (len= in.read(buf)) != -1这里搞错了很要命out.write(buf,0,len);//buf->out}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(out !=null)out.close();if(in !=null) in.close();} catch (IOException e) {e.printStackTrace();}}}
}

out.write(buf)和out.write(buf,0,len)的区别

out.wirte(buf)是一次分10字节,一次一次覆盖,如果最后余出来几字节就会覆盖不全,最后的结果会多出几个字节的文字

字符流:文件复制FileReader/FileWriter

package IOProject;import java.io.*;public class FileCopyCharactor {public static void main(String[] args) {//文件->内存Reader reader =null;Writer writer =null;try {reader = new FileReader("d:/说明.txt");writer = new FileWriter("d:/说明完.txt");//关键char[] buf = new char[4];//字符String不适合拼接专户成StringBufferStringBuffer sb = new StringBuffer();int len = -1 ;while((len = reader.read(buf))!=-1){sb.append(buf,0,len);//将欸此读取到的字符 拼接起来//String不适合拼接字符串所以用StringBuffer}System.out.println(sb);//在内存中替换占位符String content = sb.toString();//StringSuffer中没有单个替换的replace,所以在转转换成String进行操作content = content.replace("{name}", "赵鑫阳").replace("{age}","22").replace("{address}","黑龙江");//链式写法//将替换后的内容 输出到文件  内存->文件writer.write(content);System.out.println("输出成功");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(writer!= null) writer.close();if(reader!= null) reader.close();//write.close() 将管道中的流} catch (IOException e) {e.printStackTrace();}}}
}

自带缓冲区的字符流BufferedReader/BufferedWriter

自带缓冲区的字符流:缓冲区大小,一行

BuffereReader/BuffereWriter

import java.io.*;
public class FileCopyCharactorBuffered {public static void main(String[] args) {//文件->内存(Reader)Reader reader = null ;Writer writer = null ;BufferedReader br = null ;BufferedWriter bw = null ;try {reader = new FileReader("d:/个人介绍.txt");writer = new FileWriter("d:/个人完整介绍2.txt") ;br = new BufferedReader( reader) ;bw = new BufferedWriter( writer);StringBuffer sb = new StringBuffer() ;//一行一行存入,如果没有东西则停止String line = null ;while( (line= br.readLine()) != null   ){sb.append(line) ;}System.out.println(sb);//在内存中 替换占位符String content = sb.toString() ;content= content.replace("{name}","颜群").replace("{enterprise}","蓝桥学院").replace("{weixin}","157468995");//将替换后的内容 输出到文件   ,内存 ->文件(Writer)bw.write(content);System.out.println("成功...");//writer.flush(); 将管道中的数据 刷出到 文件中} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {/**    1先关出,再关入*    2从外往内关  br外 = new BufferedReader( reader内) ;* */try {if(bw != null) bw.close();if(br!=null )  br.close();if(writer!=null) writer.close();if(reader!=null) reader.close();} catch (IOException e) {e.printStackTrace();}}}
}

二进制流DataInputStream/DataInputStream

DataInputStream/DataOutputString

package IOProject;import java.io.*;
//二进制流
public class FileCopyDate {//abc.txt->内存->xyz.txtpublic static void main(String[] args) {InputStream in = null ;OutputStream out = null ;InputStream dataInput = null;OutputStream dataOutput = null;try {//abc.txt->内存Ain = new FileInputStream("d:/abc.txt") ;//字节流转二进制流dataInput = new DataInputStream(in) ;out = new FileOutputStream("d:/xyz.txt") ;dataOutput = new DataOutputStream(out);//开辟10字节的内存byte []buf = new byte[10] ;int len = -1 ;while(   (len= dataInput.read(buf)) != -1){//in ->buf//  (len= in.read(buf)) != -1这里搞错了很要命dataOutput.write(buf,0,len);//buf->out}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(dataOutput !=null)dataOutput.close();if(dataInput !=null)dataInput.close();if(out !=null)out.close();if(in !=null) in.close();} catch (IOException e) {e.printStackTrace();}}}
}

装饰模式:IO设计的核心思想

在不影响原有对象的前提下,无侵入的给一个对象增加一些额外的功能。

new InputStreamReader(new FileInputStream(new File(“d:/abc.txt”)));

装饰者:需要持有主题(被装饰者的引用)

十、IO输入输出流,装饰模式相关推荐

  1. java io字符输出流_灵魂一击!详解Java中的IO输入输出流

    什么是流?流表示任何有能力产生数据的数据源对象或者是有能力接收数据的接收端对象,它屏蔽了实际的I/O设备中处理数据的细节. IO流是实现输入输出的基础,它可以很方便地实现数据的输入输出操作,即读写操作 ...

  2. Java(2)-Java IO输入输出流

    一.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  3. 【Java学习笔记十】输入输出流

    在Java.io包中提供了一系列用于处理输入/输出的流类.从功能上分为两类:输入流和输出流.从六结构上可分为:字节流(以字节为处理单位)和字符流(以字符为处理单位). 字符是由字节组成.在Java中所 ...

  4. 1、IO输入输出流 简介

    IO流的分类: * 流向: * 输入流 读取数据 * 输出流 写出数据 * 数据类型: * 字节流 * 字节输入流 读取数据 InputStream * 字节输出流 写出数据 OutputStream ...

  5. Java - io输入输出流 --转换流

    转换流  转换输出流 OutputStreamWriter: 说明: /* * OutputStreamWriter 这个类的作用 * 就是指定输出流的编码格式 * 这个类的构造方法 需要传递 一个输 ...

  6. Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)

    源码获取:博客首页 "资源" 里下载! 功能简介: 星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然 ...

  7. java用输入流创建数据文件_java开发知识IO知识之输入输出流以及文件

    java开发知识IO知识之输入输出流以及文件 一丶流概述 流十一组有序的数据序列.根据操作的类型,可以分为输入流跟输出流两种. IO(input/output)输入/输出流提供了一条通道程序.可以使用 ...

  8. Java中IO流,输入输出流概述与总结(转载自别先生文章)

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

  9. Java IO (二),常见的输入/输出流

    字节流和字符流 InputStream和Reader InputStream和Reader两个抽象类是所有输入流的基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板.他们的方法是所有输入 ...

  10. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

最新文章

  1. IDEA + Vim = 得劲
  2. 前1000位粉丝的诞生
  3. 初学ActionScript 3.0(一):Hello World
  4. Guava 是个风火轮之基础工具(4)
  5. php foreach结果如何保存_每天一个PHP语法四引用使用及实现
  6. [转]CSS3 Media Query实现响应布局
  7. SpanBERT: 抽取式问答的利器
  8. 【代理】http代理之快代理
  9. AE一键去黑底的插件UnMult
  10. Matlab中实现均匀量化
  11. WorkNC编程软件配套英格索尔高速铣刀帮助奥迪加工
  12. 在线编辑Word——插入图片、图形
  13. 运用PS制作3G、4G、5G、6G矢量图方法
  14. latex排版--插入符号数学公式常见问题
  15. 计算机图形化编程命令,第三课图形化编程教学设计
  16. 会议OA之签名和审批
  17. iNode客户端“未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系”问题与解决方式
  18. JavaScript(第五天)—爱创课堂专业前端培训
  19. PCB布局、布线总结(持续进行中。。。。。。)
  20. MyBatis从入门到精通(一):MyBatis入门

热门文章

  1. python数字图像处理(6):图像的批量处理
  2. UFLDL教程 -- 译文版
  3. 2021-06-21层次选择器
  4. 证明CLIQUE(团问题)是NP完全
  5. 数据结构和算法——线性结构(2)循环链表和双向循环链表
  6. android studio 中怎么写aspectj代码,Android AOP三剑客之AspectJ
  7. python中列表的嵌套是指列表的元素是另一个列表_Python实现嵌套列表去重方法示例...
  8. 十五、Oracle学习笔记:序列(用于表字段值自增)
  9. 最短路问题_Dijkstra算法
  10. 贞炸了!上线之后,消息收不到了!