Java中文件操作

java提供了一些实现类对文件进行操作


File

对具体文件(目录)进行抽象表示。File类只用于表示文件或者目录的信息(名称、大小),不能用于文件内容的访问。

file类的方法比较多,以一个实例演示常用的几个API。

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

/**
 * @program: file
 * @description: File 类的使用
 * @author: huang xin
 * @create: 2018-11-16 11:06
 */
public class FileDemo {

    public static void main(String[] args) {

        //构造方法1:String类型的路径名
        File file = new File("D:\\JAVA方向\\haha");
        //System.out.println(file.exists());
        if (!file.exists())  //判断文件状态
           file.mkdir();  //创建目录
        //file.mkdirs();  // 多级目录时,创建目录结构
        else
            file.delete(); //删除文件操作
        //是否是目录(状态)
        System.out.println(file.isDirectory()); 
        //是否是文件(状态)
        System.out.println(file.isFile());

        //File file1 = new File("D:\\JAVA方向\\huangxin.txt");
        //构造方法2:拼接路径
        File file1 = new File("D:\\JAVA方向","huangxin.txt");
        if (!file1.exists()) {
            try {
                file1.createNewFile(); //创建文件(文件操作)
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else {
            file1.delete();
        }
        //常用的File对象API
        System.out.println(file); //file.toSpring()的内容
        System.out.println(file1);//D:\JAVA方向\huangxin.txt
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getName()); //目录名
        System.out.println(file1.getName()); //huangxin.txt {文件名(不包含路径)}
        System.out.println(file1.getParent()); //D:\JAVA方向
        System.out.println(file1.getParentFile().getAbsolutePath());
    }
}

File类的进阶操作,实现目录的遍历

import java.io.File;

/**
 * @program: file
 * @description: 目录操作类
 * @author: huang xin
 * @create: 2018-11-16 13:28
 */
public class FileUtils {

    /**列出指定目录下(包括其子目录)的所有文件
     * 传入参数:父目录
     * */
    public static void listDirectory(File dir){
        if (!dir.exists()){
            throw new IllegalArgumentException("目录;"+ dir + "不存在");
        }
        if (!dir.isDirectory()){
            throw new IllegalArgumentException(dir+"不是目录");
        }
       /* String[] filenames = dir.list(); //列出当前目录下的子目录和文件
        for (String string : filenames) {
            System.out.println(dir+ "\\"+string);
        }*/

        File[] files = dir.listFiles(); //返回的是直接子目录(文件)的抽象
        if (files!=null && files.length > 0){
            for (File file: files) {
                if (file.isDirectory()){ //判断是目录就递归
                    listDirectory(file);
                }else {
                    System.out.println(file);//不是目录就打印
                }
            }
        }
    }
}

RandomAccessFile类

见名知义,提供了对文件内容的访问,既可以读文件,也可写文件。注意 只支持字节的读和写

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

/**
 * @program: file
 * @description: 使用RandomAccessFile
 * @author: huang xin
 * @create: 2018-11-16 14:16
 */
public class RafDemo {
    public static void main(String[] args) throws IOException {
        File demo = new File("demo");
        if (!demo.exists()){
            demo.mkdir(); //创建目录
        }
        //构造方法3;File对象加文件名
        File file = new File(demo,"raf.dat");
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        /**下面用RandomAccessFile对文件操作
         * A:写到文件中:
         *  1、创建对象,指定读写模式
         *  2、字符内容转换成字节类型
         *  3、randomAccessFile对象的write()写到文件中
         *
         * B:读到内存中:
         *  1、开辟字节数组空间
         *  2、randomAccessFile对象的read()方法读到内存中
         *  3、Arrays.toString(buf) 将字节数组转成字符串
         *
         * 注意:文件记录指针,表示当前程序读写位置。写好文件后想重新读文件需要seek(0)
         * */
        RandomAccessFile raf = new RandomAccessFile(file,"rw"); //创建对象,指定读写权限

        System.out.println(raf.getFilePointer());//获取指针的位置

        int i = 0x7ffffff; //最大的整数
        raf.writeInt(i);  //直接写入int类型,里面实现也是byte写入

        //写入字节数组
        String s = "中";
        byte[] gbk = s.getBytes("gbk");
        raf.write(gbk);
        System.out.println(raf.getFilePointer());
        System.out.println(raf.length());

        //读文件,必须把指针移到头部
        raf.seek(0);

        //一次性把文件的内容读到字节数组中
        byte[] buf = new byte[(int)raf.length()];
        raf.read(buf);

        System.out.println(Arrays.toString(buf));
        raf.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值