流(stream):流是一连串流动的数据(字节、字符),以先进先出的方式发送的信息的通道中。

    

       输入流

       数据从源数据源流入程序的过程称为输入流。可以理解为从源数据源读取数据到程序的过程

    

     输出流

       数据从程序流出到目的地的过程称为输出流。可以理解为把数据从程序写入目的地过程

       

       数据源一般指提供数据的原始媒介,一般常见有文件、数据库、云端、其他硬件等能提供数据的媒介。

      流的分类

      【1】按照流向分为输入流和输出流

      【2】按照处理单元分为字节流和字符流

      【3】 按照功能分为节点流和转换流

     

2.0   InputStream/OutputStream

    InputStream是所有字节输入流的抽象父类,

   【1】提供了read读取一个字节

   【2】read(byte[] buf) 读取一定量的字节到缓冲区数组 buf中。

   

   OutputStream 是所有字节输出流的抽象父类,提供了

   【1】write() 写入一个字节

   【2】write(byte[] buf) 写入一定量的字节到输出流

    

   注意:

   【1】字符串写入文件时一定会存在编码问题

   【2】使用utf8编码写入文件时,如果不含中文时,win系统会对文件的编码造成误判。

   【3】通过字节流写入文件时,向管道写入一个字节,该字节立即写入文件中。

  

    总结

    【1】InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件。

3.0     File类

   FileInputStream 文件字节输入流,专门用于从文件中读取字节到程序内存中。

   FileOutputStream 文件字节输出流,专门用于从内存中写入字节到文件中。

   Filel类在java中表示(带路径的)文件或者目录

public static void main(String[] args) {

        // 给定路径创建File对象
// File file = new File("D:"+File.separator+"javatest"+File.separator+"a.txt");
File file = new File("d:\\javatest\\b.mp3");
System.out.println(file); // 文件基本属性
System.out.println(file.canExecute());
System.out.println(file.canRead());
System.out.println(file.canWrite()); // 文件的创建、删除
if(!file.exists()) { boolean r;
try {
r = file.createNewFile();
if(r) {
System.out.println("文件创建成功");
}
} catch (IOException e) {
e.printStackTrace();
}
} // 删除文件
file.delete();
}

  File的路径相关

public static void main(String[] args) {

         File file = new File("d:\\javatest\\a");
// File file = new File("a.txt"); // 获取file的绝对路径
System.out.println(file.getAbsolutePath());
// 获取file的创建时的路径字符串
System.out.println(file.getPath());
// 获取文件或者目录的名字
System.out.println(file.getName());
// 获取文件或者目录的父目录
System.out.println(file.getParent()); }

  File目录的创建

public static void main(String[] args) {

         File file = new File("d:\\javatest\\c\\d\\e");

         if(!file.exists()) {
boolean r; try {
// 一次只能创建一个目录
r = file.mkdir();          // 一次能创建多个目录
r = file.mkdirs();
if(r) {
System.out.println("目录创建成功");
}
} catch (Exception e) {
e.printStackTrace();
} }
}

    FileReader 文件字符输入流

    【1】专门用于读取默认字符编码文本性文件。

    FileWriter 文件字符输出流,

      【2】专门用于写入默认字符编码的文本性文件。为了提高效率,FileWriter内部存在一个字节缓冲区,用于对待写入的字符进行统一编码到字节缓冲区,一定要在关闭流之前,调用flush方法刷新缓冲区。

    

4.0  转换流

  InputStreamReader 继承于Reader,是字节流通向字符流的桥梁,可以把字节流按照指定编码 解码 成字符流。

  OutputStreamWriter 继承于Writer,是字符流通向字节流的桥梁,可以把字符流按照指定的编码 编码 成字节流。

  

  注意:

  【1】win平台默认的utf8编码的文本性文件带有BOM,java转换流写入的utf8文件不带BOM。所以用java读取手动创建的utf8文件会出现一点乱码(?hello中国,?是bom导致的)

  【2】一句话:用字符集编码,一定用字符集解码!!

5.0   BufferedReader/BufferedWriter

6.0  标准输入输出流

  【1】源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in 得到一个InputStream字节输入流。

   需求:在控制台输入一句话,然后原样输出

public static void main(String[] args) throws IOException {
// 需求:输入一句话,然原样输出
InputStream in = System.in; byte[] buf = new byte[1024];
int len;
// buf中包含回车和换行
len = in.read(buf); String str = new String(buf, 0, len);
// System.out.println(Arrays.toString(buf));
System.out.println(str);
}

  注意:

  [1] 标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。

public static void main(String[] args) throws IOException {
// 需求:从控制台高效读取一行数据。把一首诗写入文件。 InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in, "GBK");
BufferedReader br = new BufferedReader(reader); File file = new File("d:\\javatest\\k.txt");
FileWriter writer = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(writer); String end = "bye";
while(true) {
String line = br.readLine();
if(line.equals(end)) {
break;
} bw.write(line);
// bw.newLine();
} bw.flush(); bw.close();
writer.close(); }

7.0     标准输出流(PrintStream)   

    数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的

    打印方法用于打印各种数据类型。

IO流_File类的更多相关文章

  1. java ->IO流_File类

    IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...

  2. Java_IO流_File类配合使用(其中用到了递归)

    第一:Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.以下对Java File文件操作以及常用方法进行简单介绍 案例1:遍历出指定目录下的文件夹,并输出文件名 stat ...

  3. Java学习笔记33(IO:打印流,IO流工具类)

    打印流: 有两个类:PrintStream     PrintWriter类,两个类的方法一样,构造方法不一样 PrintStream构造方法:接收File类型,接收字符串文件名,接收字节输出流(Ou ...

  4. Java常用工具类之IO流工具类

    package com.wazn.learn.util; import java.io.Closeable; import java.io.IOException; /** * IO流工具类 * * ...

  5. 09、IO流—File类与IO流

    目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...

  6. Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)

    一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...

  7. 021.1 IO流——File类

    ########################################IO流:    IO:用于处理设备上的数据的技术.设备:内存,硬盘,光盘    流:系统资源,Windows系统本身就可 ...

  8. Java的IO流各个类的使用原则

    参考:http://blog.csdn.net/ilibaba/article/details/3955799 Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用): 这里有详细介绍: ...

  9. IO流——File类(文件流类)

    java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...

随机推荐

  1. 远程抓取win7 的用户登录时间

    protected void Page_Load(object sender, EventArgs e) { InvokeSystemPS("query user /server:192.1 ...

  2. C#连接Oracle数据库解决报错(需要安装Oracle客户端软件8.1.7)的问题

    1.通过nuget安装  ManagedDataAccess 2.引用 using Oracle.ManagedDataAccess.Client; 注:最低framework4.0 测试连接: // ...

  3. cogs 421. HH的项链

    421. HH的项链 http://218.28.19.228/cogs/problem/problem.php?pid=421 ★★★   输入文件:diff.in   输出文件:diff.out  ...

  4. 【VueJS】VueJS开发请求本地json数据的配置

    VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...

  5. Jmeter 跨线程组传递参数 之两种方法

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

  6. 微信小程序入门文档

    一 基本介绍 微信专门为小程序开发了一个ide叫做微信开发者工具 最新一版的微信开发者工具,把微信公众号的调试开发工作也集成了进去,可以更换开发模式. https://mp.weixin.qq.com ...

  7. Python面向对象之接口类(抽象类)

    Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...

  8. [软件工程基础]2017.11.06 第十次 Scrum 会议

    具体事项 项目交接燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #62 调试生成报告代码:#60 整理物理网站上的实验流程:#71 撰写报告生成搭建文档: 李煦通 ...

  9. Hive_Hive的数据模型_视图

    - 视图是一种虚表,是一个逻辑概念:可以跨越多张表- 视图建立在已有表的基础上,视图赖以建立的这些表称为基表.- 视图可以简化复杂的查询. 创建视图 create view viewName as s ...

  10. ASPECTJ 注解。。。

    public interface ISomeService { public void doSome(); public String dade(); } public class SomeServi ...