IO类操作

File类介绍和路径分隔符:

File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径.
该类包含了创建,删除文件,重命名文件,判断文件读写权限以及文件是否存在,查询等功能方法.
只能设置和获取文件本身的信息,不能设置和获取文件的内容.

路径分隔符,属性分隔符:

Unix: 使用”/”,来分割目录路径. 使用:来分割属性.
Windows: 使用”\”,来分割目录路径.但是在Java中一个”\”表示转义,在Windows平台的Java代码中表示一个路径,就得使用两个\. 但是Windows支持/. 使用;来分割属性.

因为我们不知道以后运行的系统平台是什么,就不知道该如何编写分隔符的问题,因此在File类中提供了两类常量,分别来表示路径分隔符和属性分隔符.

//路径分隔符
System.out.println(File.pathSeparatorChar);
System.out.println(File.pathSeparator);
//属性分隔符
System.out.println(File.separatorChar);
System.out.println(File.separator);

获取File路径和检测状态:
操作File路径和名称:
File getAbsoluteFile() :获取绝对路径
String getAbsolutePath():获取绝对路径
String getPath() :获取文件路径
String getName() :获取文件名称
File getParentFile():获取上级目录文件
String getParent() :获取上级目录路径

检测File状态的方法:
boolean canExecute() :判断是否是可执行文件
boolean canRead() :判断该文件是否可读
boolean canWrite():判断该文件是否可写
boolean isHidden():判断该文件是否是隐藏文件
long lastModified():判断该文件的最后修改时间
long length():获取该文件的长度大小(单位字节)

File类中方法-文件操作:
boolean isFile() :是否是文件
boolean createNewFile() :创建新的文件
static File createTempFile(String prefix, String suffix) :创建临时文件
boolean delete() :删除文件
void deleteOnExit() :在JVM停止时删除文件
boolean exists():判断文件是否存在
boolean renameTo(File dest) :重新修改名称

File类中方法-目录操作
boolean isDirectory() :判断是否是目录
boolean mkdir()  :创建当前目录
boolean mkdirs() :创建当前目录和上级目录
String[] list() :列出所有的文件名
File[] listFiles() :列出所有文件对象
static File[] listRoots() :列出系统盘符

需求:列出指定目录中所有的文件,包括子文件夹中的所有文件(使用递归算法(recursion)).

public class test {
public static void main(String[] args) {
    File file = new File("c:/p2p");
    listFile(file);
}

private static void listFile(File file) {
    File[] files = file.listFiles();
    for (File f : files) {
        if (f.isDirectory()) {
            listFile(f);
        }else{
            System.out.println(f.getName());
        }
    }
}
}

需求:java读取文件

public static void main(String[] args) throws Exception {
    //创建源
    File file=new File("D:/user.txt");
    //创建文件字节输入流对象
    InputStream in=new FileInputStream(file);
    //int len=in.read(); 65
    byte[] bb=new byte[30];
    int len=-1;
    while((len=in.read(bb))!=-1){
        System.out.println(new String(bb,0,len));
    }
    //关闭对象
    in.close();     
}

注意 以上如果读出部分中文乱码,这是因为一个汉字是2-4字节,而空格,符号,英文是0.5个字节,有可能是读到了半个汉字,就会出现这种结果
*处理方式 : 将字节流转换成字符流*

try {
        // 创建源
        File file = new File("D:/user.properties");
        // 创建文件字节输入流对象
        InputStream in = new FileInputStream(file);
        InputStreamReader ir = new InputStreamReader(in);
        char[] cc = new char[30];
        int len = -1;
        String str="";
        while ((len = ir.read(cc)) != -1) {
            str+=new String(cc, 0, len);
        }
        // 关闭对象
        in.close();
        System.out.println(str);
        for(String s :str.trim().split(";")){
            String[] ss = s.trim().split(":");
            window.users.put(ss[0].replace(" ", ""), ss[1].replace(" ", ""));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

需求:java输出文件

public static void main(String[] args) throws Exception {
    //创建输出的目标文件 out.txt
    File file=new File("C:/abc/out.txt");
    //创建文件字节输出对象
    FileOutputStream out=new FileOutputStream(file, false);
    out.write(65);
    out.write("Zoe KV ZSDN ".getBytes());
    out.write("ABBBBBBBB".getBytes(), 1, 8);
    out.close();
}

使用字节流拷贝文件

public static void main(String[] args) {
    InputStream in = null;
    OutputStream out = null;
    try {
        //创建文件源
        File file = new File("C:/abc/abc.txt");
        //目标文件
        File file_copy = new File("C:/abc/abc_Copy.txt");
        //字节码输入流
        in = new FileInputStream(file);
        //字节码输出流
        out = new FileOutputStream(file_copy);
        //操作
        byte[] buf = new byte[10];
        int len = 0;
        while ((len = in.read(buf)) != -1) {
            System.out.println(new String(buf, 0, len));
            out.write(buf, 0, len);
        }
    } catch (Exception e) {
        // TODO: handle exception
    }
    //关闭流操作
    try {
        if (in != null) {
            in.close();
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        if (out != null) {
            out.close();
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

过滤文件

public static void main(String[] args) {
    File file=new File("C:/abc");
    File[] files=file.listFiles(new FileFilter() {
        public boolean accept(File pathname) {
                return pathname.toString().contains(".avi");
        }
    });
    for (File f : files) {
        System.out.println(f);
    }
    //C:\abc\a.avi
    //C:\abc\aa.avi
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值