栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

IO、存储、硬盘、文件系统相关常识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IO、存储、硬盘、文件系统相关常识

目录

1.常识

2.File类

 3.文件内容的读写

3.1文件的读取

 3.2文件的写入


1.常识

文件是存储在硬盘上的

硬盘和内存的区别:

1.内存存储空间小,硬盘空间大

2.内存访问速度快,硬盘速度慢

3.内存成本高,硬盘便宜

4.内存掉电数据丢失,硬盘掉电数据还在

2.File类

文件也是被操作系统管理的,操作系统内核中有一个专门的模块,文件系统

Java针对文件系统/文件进行了一系列的封装

文件操作,Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。

注意,有 File 对象,并不代表真实存在该文件。

即使本来存在这个文件,但是还是要调用File类来创建对象,从而达到操作文件的后续方法的实现

file类里面的方法与构造方法

1.观察 get 系列的特点和差异
public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/java/test.txt");
        System.out.println(file.getParent());//获取上一层文件目录
        System.out.println(file.getName());获取文件名字
        System.out.println(file.getPath());获取文件路径
        System.out.println(file.getAbsolutePath());获取绝对路径
        System.out.println(file.getCanonicalPath());获取唯一的绝对路径
    }
}

有些表示方法会用文件名的上层目录简单的用"."或者".."表示

如果路径中包含“.”或“..”等当前路径及上层路径表示法

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
}

 getCanonicalPath()方法则会从路径名中删除“.”和“..”使用真实路径代替,这点是与相对获取绝对路径不同的一点.

"."代表当前这一层的文件,".."代表(所有的)父节点

IDEA中,直接运行一个程序,此时的基准目录就是当前项目所在的目录

相对路径是当前文件到目标文件的路径,而当前文件在IDEA指的是当前项目.

2.普通文件的创建与删除

public class Demo1 {//创建文件目录
    public static void main(String[] args) throws IOException {
        File file = new File("text/aaa/111/222");//在这里我们想要创建一个文件目录
        System.out.println(file.exists());//一开始还没有创建目录之前是没有文件存在的
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        System.out.println("=====================");
        //file.mkdir();//创建目录,如果中间目录不存在,则创建失败
        file.mkdirs();//创建多级目录
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());


    }
}

 File file = new File("test/aaa/111");

file.mkdirs();//创建多级目录

System.out.println(file.delete())//这个直接把文件删除

file.deleteOnExist();//这个知道程序结束后把文件删除

System.out.pintln(file.exist());//这个虽然会返回ture,但是因为程序还在运行所以没被删除

由此可见程序运行后,111这个文件还是被删除了

3.文件的重命名

 File file = new File("some-file.txt"); // 要求 some-file.txt 得存在,可以
是普通文件,可以是目录
        File dest = new File("dest.txt");   // 要求 dest.txt 不存在

  System.out.println(file.renameTo(dest));//最后返回true
public class Demo1 {//创建文件目录

    public static void main(String[] args) throws IOException {

 File file = new File("./linjie.txt"); // 要求 原文件得存在,可以
                //是普通文件,可以是目录
                File dest = new File("./huawei.txt"); // 要求 修改之后的文件不存在
 System.out.println(file.exists());
 System.out.println(dest.exists());
 System.out.println(file.renameTo(dest));
 System.out.println(file.exists());
 System.out.println(dest.exists());

 修改之后得到

 3.文件内容的读写

3.1文件的读取

1.InputStream类读取数据,由于是抽象类,所以用FileInputStream类创建对象,读取的是字节流的数据

想要读取英文字母时,返回的是它的ASCII码值,读取汉字的时候,按照utf8的编码规则,会得到三个字节一个汉字的编码

例子:

public static void main(String[] args) throws IOException {
        //使用一下InputStream
        //1.打开文件
        InputStream inputStream = new FileInputStream("./text.txt");//相对路径
        //2.读取文件
     
        byte[] b = new  byte[1024];
        int len = inputStream.read(b);
        System.out.println(len);
        for (int i = 0; i < len; i++){
            System.out.println(b[i]);
        }

        //3.关闭文件
        inputStream.close();
    }
}

在文本文件里输入hello,返回

各自的ASCII码值

如果输入的是汉字

则一个汉字需要三个字节的数字表示,具体规则得看utf8的编码表

2.Read类采取字符流的方式读取数据

public class Demo2 {
    //使用字符流读一下文件
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("text.txt");
        char  [] buffer  = new char[1024];
        int len = reader.read(buffer);;
        for (int i = 0; i < len; i++) {
            System.out.println(buffer[i]);

        }
        reader.close();
    }

}

 

 字符流读取文档的方式较字节流更方便

但Scanner类是一种最简单读取数据的方法

Scanner scanner = new Scanner(System.in)

String a = scanner.next();

System.out.println(a);

这里的in就是代表我们上面说到的inputStream,System代表在系统用户自行输入数据

 如果要在我们的文件读取的话,就修改一下Scanner的构造方法

public class Demo4 {
    public static void main(String[] args) throws FileNotFoundException {
        InputStream inputStream = new FileInputStream("text.txt");
        Scanner scanner = new Scanner(inputStream);
        String a = scanner.next();
        System.out.println(a);
    }
}

 这个方法可以得到与我们输入完全一致的答案

 3.2文件的写入

字节流:OutputStream/FileOutputStream

字符流:Writer/FileWriter

和Scanner相对的,还可以使用PrintWriter

printWriter跟我们的System.out.println有相像之处,前者在文件显示写入的内容,后者在系统面板上显示输出的内容

 public static void main(String[] args) {
        try(OutputStream outputStream = new FileOutputStream("text.txt")){
            PrintWriter printWriter = new PrintWriter(outputStream);
            printWriter.println("hello");
            printWriter.flush();//刷新缓冲区,显示内容
        }catch(IOException e){
            e.printStackTrace();
        }
    }

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1041078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号