计算机的存储方式主要包括内存和外部存储器两种形式。
内存:内存是计算机用来存储程序和数据的临时存储器,也称为随机存取存储器(RAM)。内存存储的数据是易失性的,当计算机断电或重启时数据就会丢失。内存的作用是存储当前运行的程序和数据,以便CPU快速访问。内存的特点是读写速度快,但容量较小。
外部存储器:外部存储器是计算机用来存储长期数据的设备,比如硬盘、固态硬盘、U盘、SD卡等。外部存储器存储的数据是非易失性的,即使计算机断电或重启数据也不会丢失。外部存储器的容量一般比内存大,可以存储更多的文件和数据,但读写速度相对较慢。
综上所述,计算机的存储方式包括内存和外部存储器两种,它们各有特点和作用,通常在计算机运行过程中同时使用这两种存储方式来完成数据存储和处理。
比较常见的存储方式有内存和硬盘,这两种方式各有利弊,内存里存储的内容电脑关机重启后是不会保存的,没有了就真的没有了,而硬盘中的内容只要不主动删除就会一直保存下去。
内存:容量小,访问速度块,成本高。
硬盘:容量大,访问速度慢,成本低。
系统因为要管理文件因此引入了“文件系统”,每个文件都有一个路径(这里的路径是树形结构)描述文件所在位置。
路径有两种一种为绝对路径,另一种为相对路径这两种路径都可使用,只不过在不同的场合两种路径的使用返回不同。
绝对路径:绝对路径就是指完整的路径,没有任何的省略,例如一个文件在Windows系统中的绝对路径可能是C:\Users\username\Desktop\file.txt通过这样的路径我们就可以清楚准确的找的这个文件所在位置。
相对路径:使用相对路径是需要确定好基准,使用不同的基准相对路径的表示方式是不一样的例如有一个绝对路径C:\Users\username\Desktop\file.txt如果以C:\Users\username\Desktop为基准那么它的相对路径就为 .\Desktop这里的 “.”就是指C:\Users\username\Desktop这个基准如果基准为C:\Users\username那么相对路径就为 ..\Desktop 这里的“..”是指当前目录的上一个目录。
文件包括文本文件和二进制文件,但是需要注意的是虽然我们这样进行区分但是文本文件最底层依旧是二进制文件,我们有时打开一个不了解的文件会出现一些乱码那么这个文件一般情况下就是二进制文件,打开的文件如果自己看得懂(正常视角)那么一般情况下就是文本文件。
文件系统的操作:创造文件,删除文件,重命名,创建目录等。
通过IO流我们可以充分的了解文件的文件系统的操操作。
在java中的File这个类我们可以使用这个类创建文件,删除文件,修改文件路径等操作,这个类中有许多的方法可以完成这些操作。
File的构造方法有四种:
我们通常使用前三种,在前三种中最简单的就是第三种,例如:
File file1 = new File("./test.txt"); File file2 = new File(".\\test.txt"); File file3 = new File("D:/test7_25/untitled1/test.txt"); File file4 = new File("D:\\test7_25\\untitled1\\test.txt");
在这里创造的文件是在java这个目录下的文件“.”就代表了java这个文件所在目录也就是 D:\\test7_25\\untitled1这四种写法的效果是一摸一样的,只不过一个是绝对路径一个是相对路径,在这里我们要特别注意我们常见的文件当中都是‘\’例如:C:\Users\username\Desktop\file.txt在这里我们要写成双斜杠的原因是我们在编写代码的时候编译器会将‘\’认定为转义字符因此我们要使用双斜杠来抵消这种效果,在这里我们并没有真正的创造文件只是来表示一种正确的写法,想要真正的创造文件,我们还需要用到createNewFile()方法这种方法在使用的时候会抛出throws IOException 异常。
除了创建文件的方法之外还有很多的方法,例如:
Modifier and Type | Method and Description |
---|---|
boolean | canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean | canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。 |
boolean | canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。 |
int | compareTo(File pathname) 比较两个抽象的路径名字典。 |
boolean | createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 |
static File | createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
static File | createTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean | delete() 删除由此抽象路径名表示的文件或目录。 |
void | deleteOnExit() 请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。 |
boolean | equals(Object obj) 测试此抽象路径名与给定对象的相等性。 |
boolean | exists() 测试此抽象路径名表示的文件或目录是否存在。 |
File | getAbsoluteFile() 返回此抽象路径名的绝对形式。 |
String | getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 |
File | getCanonicalFile() 返回此抽象路径名的规范形式。 |
String | getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 |
long | getFreeSpace() 返回分区未分配的字节数 named此抽象路径名。 |
String | getName() 返回由此抽象路径名表示的文件或目录的名称。 |
String | getParent() 返回此抽象路径名的父 |
File | getParentFile() 返回此抽象路径名的父,或抽象路径名 |
String | getPath() 将此抽象路径名转换为路径名字符串。 |
long | getTotalSpace() 通过此抽象路径名返回分区 named的大小。 |
long | getUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。 |
int | hashCode() 计算此抽象路径名的哈希码。 |
boolean | isAbsolute() 测试这个抽象路径名是否是绝对的。 |
boolean | isDirectory() 测试此抽象路径名表示的文件是否为目录。 |
boolean | isFile() 测试此抽象路径名表示的文件是否为普通文件。 |
boolean | isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。 |
long | lastModified() 返回此抽象路径名表示的文件上次修改的时间。 |
long | length() 返回由此抽象路径名表示的文件的长度。 |
String[] | list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
String[] | list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] | listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
File[] | listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
File[] | listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
static File[] | listRoots() 列出可用的文件系统根。 |
boolean | mkdir() 创建由此抽象路径名命名的目录。 |
boolean | mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 |
boolean | renameTo(File dest) 重命名由此抽象路径名表示的文件。 |
boolean | setExecutable(boolean executable) 为此抽象路径名设置所有者的执行权限的便利方法。 |
boolean | setExecutable(boolean executable, boolean ownerOnly) 设置该抽象路径名的所有者或每个人的执行权限。 |
boolean | setLastModified(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。 |
boolean | setReadable(boolean readable) 一种方便的方法来设置所有者对此抽象路径名的读取权限。 |
boolean | setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。 |
boolean | setReadOnly() 标记由此抽象路径名命名的文件或目录,以便只允许读取操作。 |
boolean | setWritable(boolean writable) 一种方便的方法来设置所有者对此抽象路径名的写入权限。 |
boolean | setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。 |
Path | toPath() 返回从此抽象路径构造的java.nio.file.Path对象。 |
String | toString() 返回此抽象路径名的路径名字符串。 |
URI | toURI() 构造一个表示此抽象路径名的 file: URI。 |
URL | toURL() 已弃用 此方法不会自动转义URL中非法的字符。 建议在新的代码转换的抽象路径到URL通过先转换成URI,经由toURI方法,然后经由转换URI为URL URI.toURL方法。 |
在这里我们无法进行一一介绍我们主要介绍几个常用的方法。
创建文件:createNewFile()
createNewFile()方法在使用是会抛出异常,主要原因在于创造文件可能会失败,比如硬盘空间不够又或者是没有权限,硬盘空间不够很容易理解,但是权限就比较复杂,操作系统对于文件\目录也是有权限的对其加以限制,我们可以简单的理解为,我们在某种情况下在想在某一个目录创造一个文件结果计算机没有给操作者这个权限去在指定目录下去创造文件。
使用方法也非常简单直接调用即可:
file.createNewFile();
如果未抛出则为创建文件成功。
查看路径:getAbsoluteFile());getCanonicalFile());getPath();
查看路径有这四种方法但是这三种种方法在这三种方式在不同情况下表示路径的方式是不同的例如:
File file1 = new File(".\\test1.txt"); file1.createNewFile(); System.out.println("相对路径"); System.out.println(file1.getAbsoluteFile()); System.out.println(file1.getCanonicalFile()); System.out.println(file1.getPath()); File file2 = new File("D:\\test7_25\\untitled1\\test2.txt"); file2.createNewFile(); System.out.println("绝对路径"); System.out.println(file2.getAbsoluteFile()); System.out.println(file2.getCanonicalFile()); System.out.println(file2.getPath());
分别通过两种路径创建文件输出结果有什么差别呢?
我们可以看到 在绝对路径下三种方式是一模一样的,而相对路径三种路径表示方式是有所差别的。
对于相对路径中的getPath()方法是按照标准相对路径表示的 这里的‘.’就是这个java文件所在目录文件的名字为test1.txt,getAbsoluteFile()和getCanonicalFile()方法唯一的区别就是getAbsoluteFile()取得的路径中比getCanonicalFile()中的路径多了一个‘.\’这个符号是可以省略的这位这里的‘.’就代表了相对路径的基准,在这里我们不难看出如果想要输出一个完整的不含任何修改地址我们可以使用 getCanonicalFile()方法。
获得文件名 getName()这个方法也非常好理解,就是这个文件的名字。
File file = new File(".\\test1.txt"); file.createNewFile(); System.out.println(file.getName());
这里的路径无论是绝对路径还是相对路径都是一样的在这里我们只是表示晚间的名字:
删除文件:deleteOnExit();delete();
这两种删除都是删除文件的方法,但是这两种方法删除文件的时机不同,delete()方法知道要调用就删除文件而当调用deleteOnExit()方法是删除的时机是所在进程结束时文件才会删除,存在的意义就是来构造临时文件,如果程序突然关闭,那么历史文件不会消失,就像一个word文档一样可以还原出你正在编辑的内容。