java-code: java代码管理 (gitee.com)

文章目录

目录

文章目录

一、File类

1.File的属性:

2.File类的构造方法:

3.File类的方法:

二、文件的基本操作

1.inputStream

2.OutputStream 

​编辑

3.字符流读取(Reader)

4.字符流写(Writer)


一、File类

 File类的使用在JAVA中操作文件~

1.File的属性:

在new是时候输入路径,这个路径是绝对路径和相对路径都可以。

一个是依赖于系统的路径分隔符,String 类型的表示

另外一个是依赖于系统的路径分隔符,char 类型的表示

2.File类的构造方法:

File(File parent, String child)  :根据父目录和孩子文件路径,创建一个File实例
File(String pathname) :根据文件路径创建一个File实例,可以是绝对路径或者相对路径
File(String parent, String child) :根据父目录的路径和孩子文件的路径,创建一个File实例

3.File类的方法:

这里举例几个简单常用的方法~
public class IODemo1 {
    public static void main(String[] args) throws IOException {
        File file=new File("./哲学家.png");
        System.out.println(file.getParent());  //返回File对象的父目录文件路径
        System.out.println(file.getName());    //返回File对象的纯文件名称
        System.out.println(file.getPath());   //返回File对象的文件路径
        System.out.println(file.getAbsoluteFile());   //返回File对象的绝对路径
        System.out.println(file.getCanonicalPath());  //返回File对象修饰过的绝对路径
    }
}

执行结果为:

public class IODemo2 {
    public static void main(String[] args) throws IOException {
        //相对路径中./可以省略
        File file=new File("./hello_word.txt");   //IDEA 的工作目录就是这个项目所在的目录 写相对路径就是以该项目的目录为工作目录
        System.out.println(file.exists());  //文件是否存在
        System.out.println(file.isDirectory());  //判断当前File的对象代表的文件是不是目录
        System.out.println(file.isFile());   //判断File对象代表的是不是一个普通文件

        file.createNewFile();  //创建该文件
        System.out.println(file.exists());  //文件是否存在
        System.out.println(file.isDirectory());  //判断当前File的对象代表的文件是不是目录
        System.out.println(file.isFile());   //判断File对象代表的是不是一个普通文件

        file.delete();  //删除文件
        System.out.println("删除文件");
        System.out.println(file.exists());   //判断文件是否存在
    }
}

这里注意,如果在IDEA中使用相对路径创建文件,默认就是以该项目的目录为工作目录,在工作目录创建文件~

 

 具体方法就不一一列举啦,代码的注释中就是该方法的作用~

public class IODemo3 {
    public static void main(String[] args) {
        File file=new File("test-dir/123/456");
        file.mkdir();   //创建目录  只能创建一级
        file.mkdirs();   //创建多级目录
    }
}

 这样就可以实现创建目录和多级目录的操作~

 list()和listFiles():

public class IODemo4 {
    public static void main(String[] args) {
        File file=new File("test-dir");
        String[] arr=file.list();    //返回 File 对象代表的目录下的所有文件名
        System.out.println(Arrays.toString(arr));
        File[] arr1=file.listFiles();   //返回 File 对象代表的目录下的所有文件,以 File 对象表示
        System.out.println(Arrays.toString(arr1));
    }
}

 list是使用字符串数字来返回的~  

listFiles是使用File对象返回的~
重命名方法:
public class IODemo5 {
    public static void main(String[] args) {
        //重命名
        File file=new File("./test-dir");
        File dest=new File("./test2");
        file.renameTo(dest);
    }
}

 实现重命名操作啦~

以上就是File常用的方法~

二、文件的基本操作

文件的读写,针对文本文件JAVA提供了一组类,称为字符流(典型代表 Reader(输入流),Writer (输出流)) 读写的基本单位是字符~

针对二进制文件 提供了一组类 称为字节流(典型代表 inputStream,(输入流)OutputStream( 输出流))  读写的基本单位是字节~

1.inputStream

基本方法: read() :读取一个字节的数据,返回-1代表读取完毕

read(byte[] b)  :最多读取b.lenth的字节的数据到b,返回实际读到的数量,-1代表读取完毕
read(byte[] b, int off, int len)  :最多读取,len-off 字节的数据到b 中,放在从off开始的下标 -1代表读取完毕
由于inputStream是个抽象类,不能直接实例化,里面的类有很多,这里我们只用文件操作,使用 FileInputStream 来实例化~
public class IODemo6 {
    //事先在目录中准备了文件,内容为abc
    public static void main(String[] args) throws IOException {   //使当前对象和硬盘上的文件关联起来
        try(InputStream inputStream=new FileInputStream("d:/test.txt")) {  //相当于打开文件,如果不存在就抛出异常
            while (true) {                              //try代码块的作用可以在代码块结束的时候自动执行close操作
                int ret = inputStream.read();  //读取文件,一次读取一个字节,一直到文件读取结束返回-1  这里使用int接收
                if (ret == -1) {                 // (需要-1来确定是否读取完)
                    break;
                }

                System.out.printf("%s\n",ret);
            }
        }
//        inputStream.close();  //有打开就要有关闭操作~  如果不关闭,文件描述符如果超出上限就会发生严重BUG
    }
}

 输出的为对应的ASCII码~

如果文本里的内容为中文的 比如 你好世界 那么在再次输出 (因为一次读取一个字节,中文是占用三个字节的,所以读取三个字节相当于一个中文,这里我们使用十六进制输出好看一点)

 此处因为是中文,使用的就不是ASCII来对应了,使用UTF-8字符集来翻译

 对应的三个字节就为第一个汉字~

2.OutputStream 

为字节流写操作~

方法:

wirte(int b):写入要给字节的数据

write(byte[] b) :将字节数组b的所有内容全部写入
write(byte[] b, int off, int len):将b这个数组从off开始写,一共写入len个
flush() :刷新操作,将数据刷入到设备中
写入abc~
public class IODemo7 {
    public static void main(String[] args) {
        try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){
            outputStream.write(97);   //一个字节一个字节的写入文件
            outputStream.write(98);
            outputStream.write(99);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

3.字符流读取(Reader)

使用方法和上面的方法一样~ 这里就直接写入代码~

public class IODemo8 {
    public static void main(String[] args) {
        try(Reader reader=new FileReader("d:/test.txt")){  //try可以自动close
            while (true){
                int ret=reader.read();   
                if(ret==-1){
                    break;
                }
                char ch=(char)ret;
                System.out.println(ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

代码基本是一样的,就是读取的单位变成了一次读取一个字符~

4.字符流写(Writer)

public class IODemo9 {
    public static void main(String[] args) {
        try(Writer writer=new FileWriter("d:/text.txt")){
            writer.write("abdc");  //字符流输入
            writer.write("efg");
            writer.write("hig");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

这样就可以实现字符流写入了~


以上介绍本文的全部内容了,如果有任何问题欢迎私信改正或交流哦~欢迎大佬们.感谢您的支持

 

更多推荐