zoukankan      html  css  js  c++  java
  • JAVA-基础(六) Java.io

    由于IDEA相对于我这种新手来说,对学习JAVA还是比较方便,后记都移步到IDEA中进行基础学习

    1.File(文件类)

      尽管java.io定义的大多数类是实行流式操作的,File类不是。它直接处理文件和文件系 统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属 性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。 此外,File还浏览子目录层次结构。 很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到 严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File 对待,它具 有附加的属性——一个可以被 list( )方法检测的文件名列表。 下面的构造函数可以用来生成File 对象: File(String directoryPath) File(String directoryPath, String filename) File(File dirObj, String filename) 这里,directoryPath是文件的路径名,filename

    //递归测试File类的功能
    public void TestJavaIO(String filePath) {
    try {
    FilenameFilterDemo fnfd=new FilenameFilterDemo(".php");
    File f1 = new File(filePath);
    Print("File name:" + f1.getName());
    Print("Path:" + f1.getPath());
    Print("Aba Path:" + f1.getAbsolutePath());
    Print("f1 exists:" + (f1.exists() ? "existes" : "not existes"));
    Print("f1 can read" + (f1.canRead() ? " yes" : "no "));

    if (f1.isDirectory()) {
    Print("Diretory of " + f1.getName());
    String[] files = f1.list(fnfd);
    for (int i = 0; i < files.length; i++) {
    File f = new File(f1.getPath() + "/" + files[i]);
    if (f.isDirectory()) {
    Print(files[i] + " is a diretory");
    TestJavaIO(f.getPath());
    } else {
    Print(files[i] + " is a file");
    }
    }
    } else {
    Print("F1 is not a Directory");
    }

    } catch (Exception e) {
    throw e;
    }
    }
    public class FilenameFilterDemo implements FilenameFilter {
    String _ext;

    public FilenameFilterDemo(String ext) {
    this._ext = ext;
    }

    @Override
    public boolean accept(File dir, String name) {
    return name.contains(_ext);
    }
    }

    注意:list()只有 FilenameFilter 这个重构
    listFiles() 有filefilter和FilenameFilter两种重构

    2.流类 Java 的流式输入/输出建立在四个抽象类的基础上:InputStream(abstact), OutputStream
    (abstact), Reader(abstact)和Writer(abstact)
    InputStream 和OutputStream 设计成字节流类。Reader 和Writer 为字符流设计。一般说来,处理字符或字符串时应使用字符流类, 处理字节或二进制对象时应用字节流类

    void write(int b) 向输出流写入单个字节。注意参数是一个整型数,它允许你不 必把参数转换成字节型就可以调用write() ----》返回读取字符的nicode编码
    void write(byte buffer[ ]) 向一个输出流写一个完整的字节数组 ---》读取 byte个字节到 buffer中去 可以用 String(byte[]) 来获取读取的读取的内容
    3.FileInputStream(文件输入流) 文件读取流
    FileInputStream 类创建一个能从文件读取字节的InputStream 类,
    它的两个常用的构造
    函数如下:
    FileInputStream(String filepath)
    FileInputStream(File fileObj)
    eg:
    FileInputStream f0 = new FileInputStream("/autoexec.bat")

    File f = new File("/autoexec.bat");
    FileInputStream f1 = new FileInputStream(f);

    4.FileOutputStream(文件输出流) 文件写入流

    FileOutputStream 创建了一个可以向文件写入字节的类OutputStream,
    它常用的构造函 数如下:
    FileOutputStream(String filePath)
    FileOutputStream(File fileObj)
    FileOutputStream(String filePath, boolean append)

    5.ByteArrayOutputStream 字节输入流(读取) ByteArrayInputStream 字节输出流(写入)


    6.缓冲字节流 对于字节流,缓冲流(buffered stream),通过把内存缓冲器连到输入/输出流扩展一个 过滤流类。

    该缓冲器允许Java对多个字节同时进行输入/输出操作,提高了程序性能。因为 缓冲器可用,所以可以跳过、标记和重新设置流。
    缓冲字节流类是BufferedInputStream 和 BufferedOutputStream。PushbackInputStream 也可实现缓冲流。
    BufferedInputStream(缓冲输入流) 缓冲输入/输出是一个非常普通的性能优化。
    Java 的BufferedInputStream 类允许把任何 InputStream 类“包装”成缓冲流并使它的性能提高。
    BufferedInputStream 有两个构造函数:
    BufferedInputStream(InputStream inputStream)
    BufferedInputStream(InputStream inputStream, int bufSize)

    注意:输入流没有直接的toString()方法可用的,而输出流是可以直接toString(),可以理解为,输入流是指向流的一个指针,所以,不存储相应的实际内容,而输入流是把内容读入流中,再写入相应的文件的。

    7.Reader/writer  是定义流式字符输入输出的抽象类

      a.FileReader -> CharArrayReader

     CharArrayReader 是一个把字符数组作为源的输入流的实现。

     该类有两个构造函数,每 一个都需要一个字符数组提供数据源:

    CharArrayReader(char array[ ])

    CharArrayReader(char array[ ], int start, int numChars)

     b. FilerWriter 



  • 相关阅读:
    使用 linux kernel +busybox 定制linux系统
    记一次golang的内存泄露
    关于Queries_per_sec 性能计数器
    NUMA导致的MySQL服务器SWAP问题分析
    Drop Table对MySQL的性能影响分析
    当MySQL数据库遇到Syn Flooding
    tcp_tw_recycle参数引发的数据库连接异常
    一例数据同步异常问题分析
    MySQL大量线程处于Opening tables的问题分析
    MySQL DeadLock故障排查过程
  • 原文地址:https://www.cnblogs.com/freewsf/p/7767636.html
Copyright © 2011-2022 走看看