5.4

xiaoxiao2021-02-27  514

JAVA

输入/输出

(I/O)是计算机程序执行的最常见操作之一:

①创建和删除文件

②从文件或者网络套接字读取,写入文件或者网络套接字

③讲对象序列化(或者保存)到持久性存储中,检索保存的对象

文件系统和路径

一个文件系统可以包含三个类型的对象:文件、目录(也称为文件夹)和符号链接

位于目录树最上面的目录称为根目录,Linux和UNIX的变体都有一个根目录,而Windows可以用多个根目录

文件系统中的对象可以用路径来唯一识别。

路径可以是绝对的,也可以是相对的

①绝对路径中具有指向文件系统中对象的所有信息

②相对路径中则没有所需的全部信息

在JAVA中,文件或者目录习惯上是用java.ip.File 对象来表示的,但是 File类有很多的缺陷, JAVA7 在它的 NO2包中带来了更好的替代:java.nio.file.Path 接口

Path 接口的名字非常恰当,它就是表示路径的,可以是一个文件、目录或者是一个符号链接,它也可以表示一个根目录

FileSystem 类 表示文件系统,它是一个抽象类,可以调用FileSystems.getDefault()静态方法来获取当前的文件系统:

FileSystem fileSystem = FileSystems.getDefault();

FileSystem 还有其他的方法。

getSeparator 方法返回 String 的名称分隔符,在Windows中就是\,在UNIX/Linux中就是/

public abstract java.lang.String getSeparator()

FileSystem 的另一个方法是getRootDirectories,它返回用于迭代根目录的Iterable

public abstract java.lang.Iterable<Path> getRootDirectories()

可以使用FileSystem 的getPath 方法来创建 Path

public abstract Path getPath(String first,String...more)

getPath 中只有first参数是必须的,more参数是可选的。如果有more参数,要把它放在first参数的后面

java.nio.file.Paths类提供了一个快捷方法,可以通过它的静态get方法创建Path:

Path path1 = path.get("/home/user/images");

Path path2 = path.get("/home","user","images");

Path path3 = path.get("C:\temp");

Path path4 = path.get("C:\","temp");

像/home/user/images 或者 C:\temp 这样的路径我们可以将它分解成不同的部分

前者有三个名称:home、user和images     后者只有一个名称:temp,因为不算根目录

Path中的getNameCount方法返回路径中名称的数量,用getName可以检索到每个名称:

Path getName(int index)

index参数是从0开始的,它的值必须在0和元素数量减1之间,最靠近根目录的第一个元素的索引为0

其他重要的Path方法还有getFileName、getParent和getRoot

Path getFileName()         Path getParent()     Path getRoot()

文件和目录的处理与操作

java.nio.file.Files是一个非常强大的类,提供了处理文件和目录以及读取文件和写入文件的静态方法

可以用它创建和删除路径、复制文件、检查路径是否存在等,此外 Files还拥有创建流对象的方法

创建和删除文件与目录

使用Files的createFile 方法来创建文件:

public static Path createFile(Path file,

       java.nio.file.attribute.FileAttribute<?>...attrs)

attr参数是可选的,如果不需要设置属性那就可以忽略它,例如:

Path newFile = Paths.get("/home/jayden/newFile.txt");

如果不存在父目录,createFile就会抛出一个IOException,如果已经存在由file指定名称为文件、目录或者符号链接,那就会抛出一个FileAlreadyExistsException

用createDirectory方法来创建目录

public static Path createDirectory(Path directory,

       java.nio.file.attribute.FileAttribute<?>...attrs)

和createFile一样,createDirectory也可能会抛出一个IOException或者FileAlreadyExistsException

用delete方法来删除文件、目录或者符号链接:

public static void delete(Path path)

如果path是一个目录,那么这个目录必须是空的。如果path是一个符号链接,那么只会删掉链接而不会删掉链接的目标。如果path不存在,则会抛出NoSuchFileException

删除路径时必须检查路径是否存在,可以使用 deleteIfExists:

public static void deleteIfExists(Path path)

如果正在用deleteIfExists 删除目录,这个目录必须是空的,如果不是空的就会抛出DirectoryNotEmptyException

检索目录的对象

可用Files类的newDirectoryStream方法来检索目录中文件、子目录和符号链接,这个方法将返回一个DirectoryStream来迭代目录中所有的对象

newDirectoryStream方法的签名如下:

public static DirectoryStream<Path> newDirectoryStream(Path path)

此方法返回的DirectoryStream使用后必须关闭

复制和移动文件

复制文件和目录有三个copy方法,最易于使用的是:

public static Path copy(Path source, Path target,

CopyOption 是java.nio.file中的一个接口 StandardCopyOption枚举是它的一个实现,

三个复制选项:

ATOMIC_MOVE ,将移动文件作为原子文件系统操作

COPY_ATTRIBUTES,把属性复制给新文件

REPLACE_EXISTING,如果文件存在,替换它

文件的读取和写入

File类提供了读取和写入小型二进制文件和文本文件的方法:readAllBytes和readAllLines 方法

两个write方法重载都有一个可选的OpenOption,第二个方法重载还有一个Charset

OpenOption接口定义了用来打开文件写入的选项

StandardOpenOption枚举实现OpenOption接口并提供下面的值

Append:如果打开文件进行写入,那么要写入的数据将添加到文件的末尾

Create:如果不存在就创建一个新文件

Create_New:如果已经存在,就创建一个新文件并抛出异常

Delete_on_close:关闭时删除文件

Dsync:指示文件内容的更新会同步写入

Read:打开文件进行读取

Sparse:稀疏文件

Truncate_Existing:如果文件打开进行写入,并且文件已经存在,就把文件的长度缩短到0

Write:打开文件进行写入

泛型

所有的Java类都衍生自 java.lang.Object,即所有Java的对象都可以转换成Object

泛型类型也可以接受参数:MyType<typeVar1,typeVar2,...>

例如要声明一个java.util.List:

List<E> myList;

E称为类型变量,即要被类型替换的变量,然后将替换类型变量的值用作参数类型,或者方法的返回类型,或者泛型类型中的方法。

使用类型变量E的泛型类型允许在声明或者实例化泛型类型时传递E。如果E是一个类的话,还可以传递E的子类;如果E是一个接口,还可以传递实现E的类

声明包含泛型的类的格式:

[访问修饰符]  class 类名<泛型1,泛型2,…> {

                 泛型1 泛型成员1;

                 泛型2 泛型成员2;

                //....

            }

Linux 系统安全命令 常用的有:passwd 、su 、sudo、 chgrp、 chmod、 newgrp等 设置密码——passwd -d 删除密码 -f:随机产生一组密码,强行解开锁住的账户,必须与参数“-u”同时使用 -k:密码过期后,才能更新 -s:列出密码的相关信息 -u:解开已经上锁的账号,删除加上的“!”号,恢复账号密码 变更用户身份——su 从普通用户变更为root用户 su root 以user1用户身份登录,显示当前工作目录内容后恢复身份 su -c ls user1 以user1用户身份登录,更改工作目录,显示当前工作目录内容后退出 su - -c ls user1 以其他身份执行命令——sudo 使用root用户权限运行命令 sudo ls /root 更改文件或目录的所属群组——chgrp命令 更改install.log的群组 chgrp users install.log 把文件install.log的群组改回原来的名字 chgrp root install.log 改变文件的属组 改变/home/pss/test.txt的属组为pss chgrp -R pss /home/pss/test.txt 改变目录以及其下的所有文件的属组 改变目录/home/pss/mytest以及其下所有文件的属组为pss chgrp -R pss /home/pss/mytets 改变文件或目录的访问权限——chmod 数字类型改变文件权限 chmod 666 test chmod 777 test 符号类型改变文件属性 chmod a=wx test chmod:u=rwx,go=rx test
转载请注明原文地址: https://www.6miu.com/read-3121.html

最新回复(0)