java IO、文件操作

File

File类静态成员变量

import java.io.File;
/*
 *  java.io.File
 *    将操作系统中的,文件,目录(文件夹),路径,封装成File对象
 *    提供方法,操作系统中的内容
 *    File与系统无关的类
 *    文件 file
 *    目录 directory
 *    路径 path
 */
public class FileDemo {
  public static void main(String[] args) {
    //File类静态成员变量
    //与系统有关的路径分隔符
    String separator = File.pathSeparator;
    System.out.println(separator);// 是一个分号,目录的分割   Linux :

    //与系统有关的默认名称分隔符
    separator = File.separator;
    System.out.println(separator);// 向右 \  目录名称分割  Linux /
  }
}

File类的构造方法

import java.io.File;

/*
 *  File类的构造方法
 *  三种重载形式
 */
public class FileDemo1 {
  public static void main(String[] args) {
    function_2();
  }
  /*
   *  File(File parent,String child)
   *  传递路径,传递File类型父路径,字符串子路径
   *  好处: 父路径是File类型,父路径可以直接调用File类方法
   */
  public static void function_2(){
    File parent = new File("d:");
    File file = new File(parent,"eclipse");
    System.out.println(file);
  }

  /*
   *  File(String parent,String child)
   *  传递路径,传递字符串父路径,字符串子路径
   *  好处: 单独操作父路径和子路径
   */
  public static void function_1(){
    File file = new File("d:","eclipse");
    System.out.println(file);
  }

  /*
   *  File(String pathname)
   *  传递路径名: 可以写到文件夹,可以写到一个文件
   *  c:\\abc   c:\\abc\\Demo.java
   *  将路径封装File类型对象
   */
  public static void function(){
    File file = new File("d:\\eclipse");
    System.out.println(file);
  }
}

File类的创建和删除功能

import java.io.File;
import java.io.IOException;

/*
 *  File类的创建和删除功能
 *  文件或者是目录
 */
public class FileDemo2 {
  public static void main(String[] args)throws IOException {
    function_2();
  }
  /*
   *  File类的删除功能
   *  boolean delete()
   *  删除的文件或者是文件夹,在File构造方法中给出
   *  删除成功返回true,删除失败返回false
   *  删除方法,不走回收站,直接从硬盘中删除
   *  删除有风险,运行需谨慎
   */
  public static void function_2(){
    File file = new File("c:\\a.txt");
    boolean b = file.delete();
    System.out.println(b);
  }

  /*
   *  File创建文件夹功能
   *  boolean mkdirs() 创建多层文件夹
   *  创建的路径也在File构造方法中给出
   *  文件夹已经存在了,不在创建
   */
  public static void function_1(){
    File file = new File("c:\\abc");
    boolean b = file.mkdirs();
    System.out.println(b);
  }


  /*
   *  File创建文件的功能
   *  boolean createNewFile()
   *  创建的文件路径和文件名,在File构造方法中给出
   *  文件已经存在了,不在创建
   */
  public static void function()throws IOException{
    File file = new File("c:\\a.txt");
    boolean b = file.createNewFile();
    System.out.println(b);
  }
}

File类的获取功能

import java.io.File;

/*
 *  File类的获取功能
 */
public class FileDemo3 {
  public static void main(String[] args) {
    function_3();
  }
  /*
   * File类的获取功能
   * String getParent() 返回String对象
   * File getParentFile()返回File对象
   * 获取父路径
   */
  public static void function_3(){
    File file = new File("d:\\eclipse\\eclipse.exe");
    File parent = file.getParentFile();
    System.out.println(parent);
  }

  /*
   * File类获取功能
   * String getAbsolutePath() 返回String对象
   * File   getAbsoluteFile() 返回File对象
   * 获取绝对路径
   * eclipse环境中,写的是一个相对路径,绝对位置工程根目录
   */
  public static void function_2(){
    File file = new File("src");
    File absolute = file.getAbsoluteFile();
    System.out.println(absolute);
  }

  /*
   * File类获取功能
   * long length()
   * 返回路径中表示的文件的字节数
   */
  public static void function_1(){
    File file = new File("d:\\eclipse\\eclipse.exe");
    long length = file.length();
    System.out.println(length);
  }

  /*
   *  File类的获取功能
   *  String getName()
   *  返回路径中表示的文件或者文件夹名
   *  获取路径中的最后部分的名字
   */
  public static void function(){
    File file = new File("d:\\eclipse\\eclipse.exe");
    String name = file.getName();
    System.out.println(name);

    /*String path = file.getPath();
    System.out.println(path);*/
//    System.out.println(file);
  }
}

File类的判断功能

import java.io.File;

/*
 *  File类的判断功能
 */
public class FileDemo4 {
  public static void main(String[] args) {
    function_1();
  }
  /*
   *  File判断功能
   *  boolean isDirectory()
   *  判断File构造方法中封装的路径是不是文件夹
   *  如果是文件夹,返回true,不是文件返回false
   *
   *  boolean isFile()
   *  判断File构造方法中封装的路径是不是文件
   */
  public static void function_1(){
    File file = new File("d:\\eclipse\\eclipse.exe");
    if(file.exists()){
      boolean b = file.isDirectory();
      System.out.println(b);
    }
  }

  /*
   *  File判断功能
   *  boolean exists()
   *  判断File构造方法中封装路径是否存在
   *  存在返回true,不存在返回false
   */
  public static void function(){
    File file = new File("src");
    boolean b = file.exists();
    System.out.println(b);
  }
}

File类获取功能

import java.io.File;

/*
 *  File类获取功能
 *  list
 *  listFiles
 */
public class FileDemo {
  public static void main(String[] args) {
    function_2();
  }
  public static void function_2(){
    //获取系统中的所有根目录
    File[] fileArr = File.listRoots();
    for(File f : fileArr){
      System.out.println(f);
    }
  }

  /*
   *  File类的获取功能
   *  File[] listFiles()
   *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
   *  返回的是目录或者文件的全路径
   */
  public static void function_1(){
    File file = new File("d:\\eclipse");
    File[] fileArr = file.listFiles();
    for(File f : fileArr){
      System.out.println(f);
    }
  }

  /*
   *  File类的获取功能
   *  String[] list()
   *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
   *  返回只有名字
   */
  public static void function(){
    File file = new File("c:");
    String[] strArr = file.list();
    System.out.println(strArr.length);
    for(String str : strArr){
      System.out.println(str);
    }
  }
}

File过滤器

import java.io.File;
import java.io.FileFilter;

/*
 *  自定义过滤器
 *  实现FileFilter接口,重写抽象方法
 */
public class MyFilter implements FileFilter{
  public boolean accept(File pathname)  {
    /*
     * pathname 接受到的也是文件的全路径
     * c:\\demo\\1.txt
     * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
     * 文件的后缀结尾是.java
     */
    //String name = pathname.getName();
    return pathname.getName().endsWith(".java");

  }
}
***************************************
import java.io.File;

/*
 *  File类的获取,文件获取过滤器
 *  遍历目录的时候,可以根据需要,只获取满足条件的文件
 *  遍历目录方法 listFiles()重载形式
 *  listFiles(FileFilter filter)接口类型
 *  传递FileFilter接口的实现类
 *  自定义FileFilter接口实现类,重写抽象方法,
 *  接口实现类对象传递到遍历方法listFiles
 */
public class FileDemo1 {
  public static void main(String[] args) {
    File file = new File("c:\\demo");
    File[] fileArr = file.listFiles(new MyFilter());
    for(File f : fileArr){
      System.out.println(f);
    }
  }
}

文件过滤器的执行流程

IO流

字节输出流OutputStream

字节输出流

  • java.io.OutputStream 所有字节输出流的超类
  • 作用: 从Java程序,写出文件
  • 字节: 这样流每次只操作文件中的1个字节
  • 写任意文件

方法都是写文入的方法

  • write(int b) 写入1个字节
  • write(byte[] b) 写入字节数组
  • write(byte[] b,int,int)写入字节数组,int 开始写入的索引, int 写几个
  • close() 方法,关闭流对象,释放与次流相关的资源
    流对象,操作文件的时候, 自己不做,依赖操作系统

FileOutputStream

import java.io.FileOutputStream;
import java.io.IOException;

/*
 *   FileOutputStream
 *   写入数据文件,学习父类方法,使用子类对象
 *
 *   子类中的构造方法: 作用:绑定输出的输出目的
 *     参数:
 *       File    封装文件
 *       String  字符串的文件名
 *
 *   流对象使用步骤
 *     1. 创建流子类的对象,绑定数据目的
 *     2. 调用流对象的方法write写
 *     3. close释放资源
 *
 *    流对象的构造方法,可以创建文件,如果文件存在,直接覆盖
 */
public class FileOutputStreamDemo {
  public static void main(String[] args)throws IOException {
    FileOutputStream fos = new FileOutputStream("c:\\a.txt");
    //流对象的方法write写数据
    //写1个字节
    fos.write(97);

    //写字节数组
    byte[] bytes = {65,66,67,68};
    fos.write(bytes);

    //写字节数组的一部分,开始索引,写几个
    fos.write(bytes, 1, 2);

    //写入字节数组的简便方式
    //写字符串
    fos.write("hello".getBytes());

    //关闭资源
    fos.close();

  }
}

文件续写与换行

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 *  FileOutputStream 文件的续写和换行问题
 *  续写: FileOutputStream构造方法, 的第二个参数中,加入true
 *  在文件中,写入换行,符号换行  \r\n
 *  \r\n 可以写在上一行的末尾, 也可以写在下一行的开头
 */
public class FileOutputStreamDemo1 {
  public static void main(String[] args)throws IOException {
    File file = new File("c:\\b.txt");
    FileOutputStream fos = new FileOutputStream(file,true);
    fos.write("hello\r\n".getBytes());
    fos.write("world".getBytes());
    fos.close();
  }
}

异常处理

import java.io.FileOutputStream;
import java.io.IOException;

/*
 *   IO流的异常处理
 *   try catch finally
 *
 *   细节:
 *     1. 保证流对象变量,作用域足够
 *     2. catch里面,怎么处理异常
 *         输出异常的信息,目的看到哪里出现了问题
 *         停下程序,从新尝试
 *     3. 如果流对象建立失败了,需要关闭资源吗
 *         new 对象的时候,失败了,没有占用系统资源
 *         释放资源的时候,对流对象判断null
 *         变量不是null,对象建立成功,需要关闭资源
 */
public class FileOutputStreamDemo3 {
  public static void main(String[] args) {
    //try 外面声明变量,try 里面建立对象
    FileOutputStream fos = null;
    try{
      fos = new FileOutputStream("s:\\a.txt");
      fos.write(100);
    }catch(IOException ex){
      System.out.println(ex);
      throw new RuntimeException("文件写入失败,重试");
    }finally{
      try{
        if(fos!=null)
            fos.close();
      }catch(IOException ex){
        throw new RuntimeException("关闭资源失败");
      }
    }
  }
}

字节输入流InputStream

/*
 *   字节输入流
 *     java.io.InputStream 所有字节输入流的超类
 *   作用: 读取任意文件,每次只读取1个字节
 *   读取的方法  read
 *     int  read() 读取1个字节
 *     int  read(byte[] b) 读取一定量的字节,存储到数组中
 */
FileInputStream

FileInputStream读取文件

import java.io.FileInputStream;
import java.io.IOException;

/*
 *  FileInputStream读取文件
 *
 *  构造方法: 为这个流对象绑定数据源
 *
 *    参数:
 *      File 类型对象
 *      String 对象
 *   输入流读取文件的步骤
 *     1. 创建字节输入流的子类对象
 *     2. 调用读取方法read读取
 *     3. 关闭资源
 *
 *     read()方法,
 *       read()执行一次,就会自动读取下一个字节
 *       返回值,返回的是读取到的字节, 读取到结尾返回-1
 */
public class FileInputStreamDemo {
  public static void main(String[] args) throws IOException{
    FileInputStream fis = new FileInputStream("c:\\a.txt");
    //读取一个字节,调用方法read 返回int
    //使用循环方式,读取文件,  循环结束的条件  read()方法返回-1
    int len = 0;//接受read方法的返回值

    while( (len = fis.read()) != -1){
      System.out.print((char)len);
    }
      //关闭资源
    fis.close();
  }
}

import java.io.FileInputStream;
import java.io.IOException;

/*
 *  FileInputStream读取文件
 *   读取方法  int read(byte[] b) 读取字节数组
 *   数组作用: 缓冲的作用, 提高效率
 *   read返回的int,表示什么含义 读取到多少个有效的字节数
 */
public class FileInputStreamDemo1 {
  public static void main(String[] args) throws IOException {
    FileInputStream fis = new FileInputStream("c:\\a.txt");
    //创建字节数组
    byte[] b = new byte[1024];

    int len = 0 ;
    while( (len = fis.read(b)) !=-1){
      System.out.print(new String(b,0,len));
    }
    fis.close();
  }
}

文件复制

读取单个字符

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 *  字节输入流,绑定数据源
 *  字节输出流,绑定数据目的
 *
 *  输入,读取1个字节
 *  输出,写1个字节
 *  此方法慢!
 */
public class FileDemo {
  public static void main(String[] args) {
    //定义两个流的对象变量
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
      //建立两个流的对象,绑定数据源和数据目的
      fis = new FileInputStream("F:\\java\\Filetest\\a.txt");
      fos = new FileOutputStream("F:\\java\\Filetest\\b.txt");
      //字节输入流,读取1个字节,输出流写1个字节
      int len = 0 ;
      while((len = fis.read())!=-1){
        fos.write(len);
      }
    }catch(IOException ex){
      System.out.println(ex);
      throw new RuntimeException("文件复制失败");
    }finally{
      try{
        if(fos!=null)
          fos.close();
      }catch(IOException ex){
        throw new RuntimeException("释放资源失败");
      }finally{
        try{
          if(fis!=null)
            fis.close();
        }catch(IOException ex){
          throw new RuntimeException("释放资源失败");
        }
      }
    }
  }
}

读取字节数组

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 *  字节流复制文件
 *   采用数组缓冲提高效率
 *   字节数组
 *   FileInputStream 读取字节数组
 *   FileOutputStream 写字节数组
 */
public class Copy_1 {
  public static void main(String[] args) {
    long s = System.currentTimeMillis();
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
      fis = new FileInputStream("c:\\t.zip");
      fos = new FileOutputStream("d:\\t.zip");
      //定义字节数组,缓冲
      byte[] bytes = new byte[1024*10];
      //读取数组,写入数组
      int len = 0 ;
      while((len = fis.read(bytes))!=-1){
        fos.write(bytes, 0, len);
      }
    }catch(IOException ex){
      System.out.println(ex);
      throw new RuntimeException("文件复制失败");
    }finally{
      try{
        if(fos!=null)
          fos.close();
      }catch(IOException ex){
        throw new RuntimeException("释放资源失败");
      }finally{
        try{
          if(fis!=null)
            fis.close();
        }catch(IOException ex){
          throw new RuntimeException("释放资源失败");
        }
      }
    }
    long e = System.currentTimeMillis();
    System.out.println(e-s);
  }
}

字符输出流

import java.io.FileWriter;
import java.io.IOException;

/*
 *   字符输出流
 *     java.io.Writer 所有字符输出流的超类
 *   写文件,写文本文件
 *
 *   写的方法 write
 *     write(int c) 写1个字符
 *     write(char[] c)写字符数组
 *     write(char[] c,int,int)字符数组一部分,开始索引,写几个
 *     write(String s) 写入字符串
 *
 *   Writer类的子类对象 FileWriter
 *
 *   构造方法:  写入的数据目的
 *     File 类型对象
 *     String 文件名
 *
 *   字符输出流写数据的时候,必须要运行一个功能,刷新功能
 *   flush()
 */
public class WriterDemo {
  public static void main(String[] args) throws IOException{
    FileWriter fw = new FileWriter("c:\\1.txt");

    //写1个字符
    fw.write(100);
    fw.flush();

    //写1个字符数组
    char[] c = {'a','b','c','d','e'};
    fw.write(c);
    fw.flush();

    //写字符数组一部分
    fw.write(c, 2, 2);
    fw.flush();

    //写如字符串
    fw.write("hello");
    fw.flush();

    fw.close();
  }
}

字符输入流

import java.io.FileReader;
import java.io.IOException;

/*
 *  字符输入流读取文本文件,所有字符输入流的超类
 *    java.io.Reader
 *  专门读取文本文件
 *
 *  读取的方法 : read()
 *   int read() 读取1个字符
 *   int read(char[] c) 读取字符数组
 *
 *   Reader类是抽象类,找到子类对象 FileReader
 *
 *   构造方法: 绑定数据源
 *     参数:
 *        File  类型对象
 *        String文件名
 */
public class ReaderDemo {
  public static void main(String[] args) throws IOException{
    FileReader fr = new FileReader("c:\\1.txt");
    /*int len = 0 ;
    while((len = fr.read())!=-1){
      System.out.print((char)len);
    }*/
    char[] ch = new char[1024];
    int len = 0 ;
    while((len = fr.read(ch))!=-1){
      System.out.print(new String(ch,0,len));
    }

    fr.close();
  }
}

转换流


   转载规则


《java IO、文件操作》 刘坤胤 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录