Java之IO流概述(一)
来源:互联网 发布:天府立交数据 编辑:程序博客网 时间:2024/06/15 03:27
流的概念
Java中所有的I/O都是用流来实现的,可以将流理解为连接到数据目标或源的管道,可以通过连接到源的流从源中读取数据,或通过连接到目标的流流向目标中写入数据。 Java中的流分为两种,一种字节流,另一种字符流,分别由四个抽象类来表示(每种流包括输入和输出两种): 1、InputStream 2、OutputStream 3、Reader 4、Writer Java中其他多种多样的流都是由上述的流派生出来的。 ![输入输出流派生图](http://img.blog.csdn.net/20170418112552495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR2VuaXVzX2luX3RoZV9sZWZ0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![IO流派生图](http://img.blog.csdn.net/20170418112836214?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR2VuaXVzX2luX3RoZV9sZWZ0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Java IO包
Java IO包总结为五个类一个接口。 1、File(文件类) 2、InputStream(字节输入流的超类,抽象类) 3、OutputStream(字节输出流的超类,抽象类) 4、Reader(字符流输入流的超类,抽象类) 5、Writer(字符流输出流的超类,抽象类) 6、Serializable接口(实现序列化用的)
## File类的常用方法 ##
import java.io.File;import java.io.IOException;/*方法: File(String pathname) * =》通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 * 提醒:文件和目录不能同时创建 * */public class FileDemo1 { public static void main(String[] args) { File file1 = new File("F:\\filedemo\\file"); //单层目录用 mkdir() //生成多层目录 mkdirs() file1.mkdirs(); //此处创建了多层目录 //生成文件操作 file1 = new File("F:\\filedemo\\file\\hehe.txt"); try { file1.createNewFile();//仅仅用于创建文件,不能创建目录 } catch (IOException e) { e.printStackTrace(); } }}
import java.io.File;import java.io.IOException;/*方法: File(File parent, String child) * =》根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 * 提醒:文件和目录不能同时创建 * */public class FileDemo2 { public static void main(String[] args) { //创建 F:\\filedemo\\hehe.txt //首先创建目录 F:\\filedemo //最后创建文件 hehe.txt File parent = new File("F:\\filedemo\\file"); File child = new File(parent,"hehe.txt"); try{ if(!parent.exists()){ //判断是否父目录是否存在 parent.mkdirs(); //一次性创建多个目录 child.createNewFile(); //创建子文件 System.out.println("文件创建成功!"); }else{ child.createNewFile(); System.out.println("文件创建成功!"); } }catch (IOException e) { e.printStackTrace(); } }}File其它方法不在概述,均在API文档中可以查到!
字节流
概述:字节流是以字节为单位,包括所有的可以存放的信息都是以字节为单位。字节流可以处理任何任意的文件类型,包括字符文件。
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/* *文件流的读取拷贝操作 */public class FileDemo1 { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { //构造输入流 in = new FileInputStream("F:\\filedemo\\file\\haha.txt"); //构造输出流 out = new FileOutputStream("F:\\filedemo\\file\\heihei.txt"); //复制字节流操作 byte[] b = new byte[512]; int len = 0; // read()只读单字节中文无法复制 ; read(byte[])可以正常读取中文 while((len=in.read(b))!=-1){ out.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally{ //关闭输入流 if(in!=null){ in.close(); } //关闭输出流 if(out!=null){ out.close(); } } }}
其中带缓冲区的 BufferedInputStream 和 BufferedOutputStream 与上述方法类似。 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(File));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(File));
字符流
着重列一下常用的字符流的几种使用方式
import java.io.*;public class TestStream { public static void main(String[] args) { TestStream test = new TestStream(); test.demo1(); test.demo2(); test.demo3(); } public void demo1() { InputStreamReader isr = null; OutputStreamWriter osw = null; try { isr = new InputStreamReader(new FileInputStream("F:\\filedemo\\file\\haha.txt")); osw = new OutputStreamWriter(new FileOutputStream("F:\\filedemo\\file\\hhhh.txt")); char[] ch = new char[512]; //缓冲区 int len = 0; while ((len = isr.read(ch)) != -1) { System.out.println(new String(ch)); osw.write(ch, 0, len); } System.out.println("成功输入输出"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (isr != null) isr.close(); if (osw != null) osw.close(); } catch (IOException e2) { e2.printStackTrace(); } } } public void demo2() { try (BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("F:\\filedemo\\file\\haha.txt"))); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("F:\\filedemo\\file\\jjjj.txt")))) { char[] ch = new char[512]; //缓冲区 int len = 0; while ((len = br.read(ch)) != -1) { System.out.println(new String(ch)); bw.write(len); } System.out.println("成功输入输出"); bw.flush(); //刷新该流的缓冲 } catch (IOException e) { } } public void demo3() { try (BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\filedemo\\file\\kkkk.txt"))) { String str = "你好,世界!"; bw.write(str); System.out.println("成功输入输出"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } }}
字节流与字符流的区别(理解这个很重要)
(1)字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
(2)字符流只能处理字符文件,而字节流既可以处理字节文件也可以处理字符文件。
0 0
- Java之IO流概述(一)
- 一、java io 概述
- 黑马程序员——Java IO流(一)之IO流概述、字符流、字节流等
- Java之IO概述
- Java IO流(概述)
- IO流(一)概述
- java之IO流详解(一)
- Java回炉之IO流(一)
- java之IO流(一)
- Java之IO(一)
- Java IO流(File概述)
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- Java基础——IO(一)——IO流概述、字节流、字符流、流操作规律
- 奋斗黑马程序员----Java之其他流概述(一)
- 学习JAVA之路(一、概述)
- java.io阻塞io流概述
- java基础--IO流概述
- Java IO流框架概述
- BeautifulRefreshLayout
- 事务管理
- 图
- 为右键新建菜单添加自定义后缀(.html, .css, .js, .py)项
- dwz的跳转回调
- Java之IO流概述(一)
- Java类初始化顺序
- dwz的talbe样式不同,决定能不能用js
- SimHash算法原理
- 数据存储之CSV
- dwz配合分页插件的带有条件上一页下一页(保证数据体系不变)
- Ubuntu 默认root用户修改密码
- 迭代模式:(用于树形结构的构建)
- OC和Swift混编情况下面的相互跳转