java io流总结

java流的总结

1.基础知识:
(1)电脑中数据的三种存储方式:外存(硬盘,磁盘,u盘)》内存(内存条),》缓冲区(在cpu中)。
(2)Java将输入输出抽象称为流
两边相当于容器,中间是数据流,两边数据源可以是文件,键盘,网络等。

  1. 数据流:
    一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。

  2. 输入流(Input Stream):
    程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道
    在这里插入图片描述

  3. 输出流:
    程序向输出流写入数据。将程序中的数据输出到外界(显示器、打印机、文件、网络…)的通信通道。

在这里插入图片描述
采用数据流的目的就是使得输出输入独立于设备。

Input Stream不关心数据源来自何种设备(键盘,文件,网络)
Output Stream不关心数据的目的是何种设备(键盘,文件,网络)
4 数据流分类:
**流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。**因此Java中的流分为两种:

  1. 字节流:数据流中最小的数据单元是字节
  2. 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

注意区分

java.lang.system
java.lang.System
public final class System extends Object{
static PrintStream err;//标准错误流(输出)
static InputStream in;//标准输入(键盘输入流)
static PrintStream out;//标准输出流(显示器输出流)
}
System类(1)不能创建对象,有三个静态成员。(2)每当main方法被执行时,就自动生成上述三个对象。

  1. 标准输出流 System.out

    System.out向标准输出设备输出数据,其数据类型为PrintStream。方法:

    Void print(参数)
    Void println(参数)
    2)标准输入流 System.in

    System.in读取标准输入设备数据(从标准输入获取数据,一般是键盘),其数 据类型为InputStream。方法:

          int read(byte[] b)//读入多个字节到缓冲区b中返回值是读入的字节数
          
    
         import java.io.*;  
public class StandardInputOutput {  
    public static void main(String args[]) {  
        int b;  
        try {  
            System.out.println("please Input:");  
            while ((b = System.in.read()) != -1) {  
                System.out.print((char) b);  
            }  
        } catch (IOException e) {  
            System.out.println(e.toString());  
        }  
    }  
}  

等待键盘输入,键盘输入什么,就打印出什么:
在这里插入图片描述
3)标准错误流

System.err输出标准错误,其数据类型为PrintStream。可查阅API获得详细说明。
标准输出通过System.out调用println方法输出参数并换行,而print方法输出参数但不换行。println或print方法都通 过重载实现了输出基本数据类型的多个方法,包括输出参数类型为boolean、char、int、long、float和double。同时,也重载实现 了输出参数类型为char[]、String和Object的方法。其中,print(Object)和println(Object)方法在运行时将调 用参数Object的toString方法。

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
public class StandardInputOutput {  
    public static void main(String args[]) {  
        String s;  
        // 创建缓冲区阅读器从键盘逐行读入数据  
        InputStreamReader ir = new InputStreamReader(System.in);  
        BufferedReader in = new BufferedReader(ir);  
        System.out.println("Unix系统: ctrl-d 或 ctrl-c 退出"  
                + "\nWindows系统: ctrl-z 退出");  
        try {  
            // 读一行数据,并标准输出至显示器  
            s = in.readLine();  
            // readLine()方法运行时若发生I/O错误,将抛出IOException异常  
            while (s != null) {  
                System.out.println("Read: " + s);  
                s = in.readLine();  
            }  
            // 关闭缓冲阅读器  
            in.close();  
        } catch (IOException e) { // Catch any IO exceptions.  
            e.printStackTrace();  
        }  
    }  
}  

java.io
在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了

  Java I/O主要包括如下几个层次,包含三个部分:

1.流式部分――IO的主体部分;

2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

3.其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

主要的类如下:

 1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。

 2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

 3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

 Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。

 4. Reader(文件格式操作):抽象类,基于字符的输入操作。

 5. Writer(文件格式操作):抽象类,基于字符的输出操作。

 6. RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

在这里插入图片描述
(1) 非流式文件类–File类
在Java语言的java.io包中,由File类提供了描述文件和目录的操作与管理方法。但File类不是InputStream、OutputStream或Reader、Writer的子类,因为它不负责数据的输入输出,而专门用来管理磁盘文件与目录。

作用:File类主要用于命名文件、查询文件属性和处理文件目录。
public class File extends Object
implements Serializable,Comparable
{}
File类共提供了三个不同的构造函数,以不同的参数形式灵活地接收文件和目录名信息。构造函数:
1)File (String pathname)
例:File f1=new File(“FileTest1.txt”); //创建文件对象f1,f1所指的文件是在当前目录下创建的FileTest1.txt
2)File (String parent , String child)
例:File f2=new File(“D:\dir1",“FileTest2.txt”) ;// 注意:D:\dir1目录事先必须存在,否则异常
3)File (File parent , String child)
例:File f4=new File("\dir3");
File f5=new File(f4,“FileTest5.txt”); //在如果 \dir3目录不存在使用f4.mkdir()先创建
一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性。
1)public boolean exists( ) 判断文件或目录是否存在
2)public boolean isFile( ) 判断是文件还是目录
3)public boolean isDirectory( ) 判断是文件还是目录
4)public String getName( ) 返回文件名或目录名
5)public String getPath( ) 返回文件或目录的路径。
6)public long length( ) 获取文件的长度
7)public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。
File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
1) public boolean renameTo( File newFile ); 重命名文件
2) public void delete( ); 删除文件
3) public boolean mkdir( ); 创建目录

import java.io.File;  
import java.io.IOException;  
public class TestFile {  
    public static void main(String args[]) throws IOException {  
        File dir = new File("\\root");  
        File f1 = new File(dir, "fileOne.txt");  
        File f2 = new File(dir, "fileTwo.java");  
        // 文件对象创建后,指定的文件或目录不一定物理上存在  
        if (!dir.exists())  
            dir.mkdir();  
        if (!f1.exists())  
            f1.createNewFile();  
        if (!f2.exists())  
            f2.createNewFile();  
        System.out.println("f1's AbsolutePath=  " + f1.getAbsolutePath());  
        System.out.println("f1 Canread=" + f1.canRead());  
        System.out.println("f1's len= " + f1.length());  
        String[] FL;  
        int count = 0;  
        FL = dir.list();  
        for (int i = 0; i < FL.length; i++) {  
            count++;  
            System.out.println(FL[i] + "is in \\root");  
        }  
        System.out.println("there are" + count + "file in //root");  
    }  
  
}  

说明:File类的方法:
(1) exists()测试磁盘中指定的文件或目录是否存在
(2) mkdir()创建文件对象指定的目录(单层目录)
(3) createNewFile()创建文件对象指定的文件
(4) list()返回目录中所有文件名字符串

(2)l流式部分-----四个基本类(都是抽象类,不能被实例化,必须生成子类之后才能实现一定的功能
在这里插入图片描述
在这里插入图片描述
待更新。。。。。。。。。。。
https://blog.csdn.net/liuxiaogangqq/article/details/25892667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值