zoukankan      html  css  js  c++  java
  • Java IO编程

    1.文件操作类: File

    File file = new File(“PATH”)

    NO. 方法 类型 描述
    1 public File(String pathName) 构造 传递完整文件操作路径
    2 public File(File parent, String child) 构造 设置父路径与子文件路径
    3 public boolean createNewFile() throws IOException 普通 创建新文件
    4 public boolean exists() 普通 判断给定路径是否存在
    5 public boolean delete() 普通 删除指定路径的文件
    6 public File getParentFile() 普通 取得当前路径的父路径
    7 public boolean mkdirs() 普通 递归创建多级目录
    8 public long length() 普通 取得文件大小,以字节为单位返回
    9 public boolean isFile() 普通 判断给定路径是否是文件
    10 public boolean isDirectory() 普通 判断给定路径是否是目录
    11 public long lastModified() 普通 取得文件的最后一次修改日期时间
    12 public String[] list() 普通 列出指定目录中的全部内容
    13 public File[] listFiles() 普通 列出所有的路径以File类对象包装

    2.字节流与字符流

    1)字节流--------------------------------------

    字节输出流:OutputStream

    在这里插入图片描述

    No. OutputStream 类的常用方法 类型 描述
    1 public void close() throws IOException 普通 关闭字节输出流
    2 public void flush() throws throws IOExcetion 普通 强制刷新
    3 public abstract void write(int b) throws IOException 普通 输出单个字节
    4 public void write(byte[] b) throws IOException 普通 输出全部字节数组数据
    5 public void write(byte[] b, int off, int len) throws IOException 普通 输出部分字节数组数据

    OutputStream 的子类 FileOutputStream

    No. FileOutputStream 类的常用方法 类型 描述
    1 public FileOutputStream(File file) throws FileNotFoundException 构造 将内容输出到指定的路径,如果文件已存在,则使用新的内容覆盖旧的内容
    2 public FileOutputStream(File file,boolean append) throws FileNotFoundException 构造 如果将布尔参数设置为true,表示追加新的内容到文件中
    OutputStream output = FileOutputStream(file);
    OutputStream output = FileOutputStream(file,true);
    调用父类方法即可操作文件
    
    字节输入流:InputStream

    在这里插入图片描述

    No. InputStream 类的常用方法 类型 描述
    1 public void close() throws IOException 普通 关闭字节输入流
    2 public abstract int read() throws IOException 普通 读取单个字节,如果已经没有内容返回 -1
    3 public int read(byte[] b) throws IOException 普通 将数据读取到字节数组中,同时返回读取长度
    4 public int read(byte[] b, int off, int len) throws IOException 普通 将数据读取到部分字节数组中,指定数组接收的长度和数组的偏移量,同时返回读取长度

    InputStream的子类FileInputStream

    No. FileInputStream 类的常用方法 类型 描述
    1 public FileInputStream(File file) throws FileNotFoundException 普通 设置要读取文件数据的路径

    2)字符流--------------------------------------

    字符输出流:Writer
    No. Writer 类的常用方法 类型 描述
    1 public void close() throws IOException 普通 关闭字符输出流
    2 public void flush() throws throws IOExcetion 普通 强制刷新
    3 public Writer append(CharSequence csq) 普通 追加数据
    4 public void write(String str) throws IOException 普通 输出字符串数据
    5 public void write(char[] cbuf) throws IOException 普通 输出字符数组数据

    Writer类的子类FileWriter

    No. FileWriter类的常用方法 类型 描述
    1 public FileWriter(File file) throws IOException 构造 设置输出文件
    2 public FileWriter(File file ,boolean append) throws IOException 构造 设置输出文件以及是否进行追加
    字符输入流:Reader
    No. Reader 类的常用方法 类型 描述
    1 public void close() throws IOException 普通 关闭字符输入流
    2 public int read() throws IOException 普通 读取单个数据
    3 public int read() throws IOException 普通 读取单个字符
    4 public int read(char[] cbuf) throws IOException 普通 读取数据到字符数组中,返回读取长度
    5 public long skip(long n) throws IOException 普通 跳过字节长度

    Reader类的子类FileReader

    No. FileReader 类的常用方法 类型 描述
    1 public FileReader(File file) throws FileNotFoundException 构造 定义要读取的文件路径

    字节流与字符流的区别
    1)字节流直接与终端文件进行数据交互,字符流需要将数据经过缓冲区处理才与终端文件数据交互。
    2)在使用OutputStream 输出数据时即使最后没有关闭输出流,内容也可以正常输出,但是反过来如果使用的是字符输出流Writer,在执行到最后如果不关闭输出流,就表示在缓冲区中处理的内容不会被强制清空,所以就不会输出数据。如果有特殊情况不能关闭字符输出流,可以使用flush()方法强制清空缓冲区。

    在实际开发中流的选用原则
    在开发中,对于字节数据处理是比较多的,例如:图片,音乐,电影,文字。而字符流最大的好处是它可以进行中文的有效处理。在开发中,如果要处理中文时应优先考虑字符流,如果没有中文问题,建议使用字节流。

    3.转换流

    在这里插入图片描述

    通过继承结构可以发现,FileWriter与FileReader都是转换流的子类,也就证明所有要读取的文件数据都是字节数据,所有的字符都是在内存中处理后形成的

    字节输入流转字符输入流 InputStreamReader 字节输出流转字符输出流OutPutStreamWriter
    定义结构 public class InputStreamReader extends Reader public class OutputStreamWriter extends Writer
    构造方法 public InputStreamReader(InputStream in) public OutputStreamWriter(OutputStream out)

    4.案例文件复制

    InputStream in = new FileInputStream(inFile);
    OutputStream out = new FileOutputStream(outFile);
    int tmp = 0 ; //保存每次读取的数据长度
    byte data [] = new byte[1024]; //每次读取1024个字节
    while((temp=in.read(data)) != -1){   //循环读取数据
    	out.write(data,0,tmp);   //输出数组
    }
    in.close();
    out.close();
    

    5.字符编码

    OutputStream output = new FileOutputStream(file);
    output.write("你好".getBytes("ISO8859-1"));	//设置输出的字符编码
    output.close();
    
    

    6.内存流

    在这里插入图片描述

    假设一种应用需要进行IO操作,但是又不想在磁盘上产生文件,就可以将内存当做一个临时文件进行操作。

    内存流:

    • 字节内存流(常用)::ByteArrayInputStream(内存字节输入流);ByteArrayOutputStream(内存字节输出流)
    • 字符内存流:CharArrayReader(内存字符输入流);CharArrayWriter(内存字符输出流)

    内存流定义的构造方法:

    • ByteArrayInputStream类构造:public ByteArrayInputStream(byte[] buf)
    • ByteArrayOutputStream类构造:public ByreArrayOutputStream()
    String str = "hello world";
    InputStream input = new ByteArrayInputStream(str.getBytes());
    OutputStream output = new ByteArrayOutputStream();
    int temp = 0 ;
    while((temp=input.read()) != -1 ){
    	ouput.write(Character.toUpperCase(temp));	//转大写
    }
    System.out.println(output);
    input.close();
    output.close();
    

    7.打印流

    在java.io包中OutputStream是进行输出操作的最核心控制类,但是利用OutputStream会存在一个问题:所有的输出数据必须以字节类型的数据为主,也就是说如果要输出的数据是int(Integer)、double(Double)、java.util.Date等常用的类型都需要将其转换为字节后才可以输出。为了解决这个问题,java.io中提供了打印流。

    java.io.OutputStream类主要是进行数据输出,如果要设计更加合适的打印流操作类,就必须解决OutputStream输出数据类型有限(只有byte类型)的问题。这时可以采用包装设计模式,将OutputStream类利用其它类进行包装、并且可以在这个类中提供了各种常见数据类型的输出操作,这样用户在进行输出操作时就可以回避字节数据的操作。
    在这里插入图片描述

    java.io提供了两个数据打印流的操作类:PrintStream(打印字节流)、PrintWriter(打印字符流)
    在这里插入图片描述

    PrintStream类的常用方法 类型 描述
    public PrintStream(OutputStream out) 构造 通过已有OutputStream确定输出目标
    public void print(数据类型 参数名称) 普通 输出各种常见的数据类型
    public void println(数据类型 参数名称) 普通 输出各种常见的数据类型,并追加一个换行

    PritnStrem与PrintWriter两个类在使用上是完全一样的

    8.System类对IO的支持

    System类与IO有关的3个对象常量

    常量 类型 描述
    1 public static final PrintStream err 常量 显示器上错误输出
    2 public static final PrintStream out 常量 显示器上信息输出
    3 public static final InputStream in 常量 键盘数据输入

    可以发现,err与out两个对象的类型都属于PrintStream 类型,in属于 InputStream类型

    9.字符缓冲流

    为了可以进行完整数据的输入操作,最好的做法是采用缓冲区的方式对输入的数据进行暂存,而后程序可以利用输入流一次性读取内容。

    • 字符缓冲区流:BufferedReader、BufferedWriter
    • 字节缓冲区流:BufferedInputStream、BufferedOutputStream
      在这里插入图片描述
    BufferedReader类的常用方法 类型 描述
    public BufferedReader(Reader in) 构造 设置字符输入流
    public String readLine() throws IOException 普通 读取一行数据,默认一" "为分隔符

    10.扫描流:Scanner

    Scanner类中定义的常用方法 类型 描述
    1 public Scanner(InputStream source) 构造 接受InputStream输入流对象,此为输入源
    2 public boolean hasNext() 普通 判断是否有数据输入
    3 public String next() 普通 取出输入数据,以String返回
    4 public boolean hasNextXxx() 普通 判断是否有指定类型数据存在
    5 public 数据类型 nextXxx() 普通 取出指定数据类型的数据
    6 public Scanner useDelimiter(String pattern) 普通 设置读取的分隔符

    11.对象序列化

  • 相关阅读:
    jquery插件之jquery.extend和jquery.fn.extend的区别
    block,inline和inline-block的区别
    css 中 div垂直居中的方法
    Native App vs Web App 以及 Hybrid App的实现原理
    小结
    传输层的端口与TCP标志中的URG和PSH位
    常见路由表生成算法与收敛路由
    NAT技术与代理服务器
    CRC校验
    BinarySearchTree-二叉搜索树
  • 原文地址:https://www.cnblogs.com/Thomas-blog/p/9728175.html
Copyright © 2011-2022 走看看