您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页Java最全深入死磕 Java IO 流(1),其实Zookeeper的选举机制也不难理解

Java最全深入死磕 Java IO 流(1),其实Zookeeper的选举机制也不难理解

来源:叨叨游戏网

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

文件和目录操作

创建与删除

| 返回值 | 方法 | 描述 |

| — | — | — |

| boolean | createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件;存在时,则创建失败 |

import java.io.File;

import java.io.IOException;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : CreateAndDelete

  • @date : 2021/4/20 10:40

  • @description : 创建&删除

*/

public class CreateAndDelete {

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

File file1 = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/2.txt”);

if (file1.createNewFile()) {

System.out.println(“创建文件成功”);

} else {

System.out.println(“创建文件失败”);

}

if (file1.delete()) {

System.out.println(“删除文件成功”);

} else {

System.out.println(“删除文件失败”);

}

File file2 = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/demo”);

if (file2.mkdir()) {

System.out.println(“创建文件夹成功”);

} else {

System.out.println(“创建文件夹失败”);

}

File file3 = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/JavaSE/demo”);

if (file3.mkdirs()) {

} else {

}

}

}

注意

相关属性

获取到 File 对象后,我们可以对其相关属性进行判断,常用方法如下:

| 返回值 | 方法 | 描述 |

| — | — | — |

| long | length() | 该抽象路径名表示的文件的所占字节大小 |

| boolean | canRead() | 该抽象路径名表示的文件是否可读 |

| boolean | canWrite() | 该抽象路径名表示的文件是否可写 |

| boolean | canExecute() | 该抽象路径名表示的文件是否可执行 |

import java.io.File;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : Main

  • @date : 2021/4/20 11:04

  • @description : 相关属性

*/

public class Main {

public static void main(String[] args) {

File file = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/new.txt”);

if (file.canExecute()) {

System.out.println(“该对象可执行”);

} else {

System.out.println(“该对象不可执行”);

}

if (file.canRead()) {

System.out.println(“该对象可读”);

} else {

System.out.println(“该对象不可读”);

}

if (file.canWrite()) {

System.out.println(“该对象可写”);

} else {

System.out.println(“该对象不可写”);

}

System.out.println(“文件大小:” + file.length() + " Byte");

}

}

判断和获取

| 返回值 | 方法 | 描述 |

| — | — | — |

| boolean | isFile() | 测试此抽象路径名表示的文件是否为普通文件 |

| String | getPath() | 将抽象路径转换为路径字符串 |

| String | getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |

import java.io.File;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : Main

  • @date : 2021/4/20 11:15

  • @description : 判断和获取

*/

public class Main {

public static void main(String[] args) {

File file = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data”);

System.out.println(file.isDirectory());

System.out.println(file.isFile());

System.out.println(file.exists());

System.out.println(“-------------------------”);

System.out.println(file.getPath());

System.out.println(file.getAbsolutePath());

System.out.println(file.getName());

System.out.println(“-------------------------”);

for (String path : file.list()) {

System.out.println(path);

}

System.out.println(“-------------------------”);

for (File path : file.listFiles()) {

System.out.println(path);

}

}

}

练习

import java.io.File;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : Test

  • @date : 2021/4/20 11:40

*/

public class Test {

public static void main(String[] args) {

File file = new File(“C:/windows”);

for (File item : file.listFiles()) {

if (item.isFile()) {

System.out.println(“文件名:” + item.getName() + “\t文件大小占:” + item.length() + " 字节");

}

}

}

}


什么是流

所谓流,就是一系列数据的组合。当我们需要进行数据交互的时候,比如在服务器和客户端之间进行数据交互时,我们此时就可以使用 Java 中的流来实现。Java 中,数据的输入和输出都是以流的形式来进行的。根据数据流方向的不同,我们可以将其分为:输入流输出流。而根据处理的数据单位不同,可分为:字节流字符流。两者的关系可以描述为下表:

| | 字节流 | 字符流 |

| — | — | — |

| 输入流 | InputStream | Reader |

| 输出流 | OutputStream | Writer |

而对于字节流和字符流的选用原则,我们建议遵循如下规则:如果数据能够通过 Windows 自带笔记本软件打开并且能够读懂其中的内容,则选用字符流,否则选择字节流。而如果我们也不知道应该使用何种类型的流,则默认使用字节流

下图描述了字节流和字符流的类层次图,注意:无论是字节流还是字符流,其子类名都是以其父类名作为子类名的后缀的

InputStream

注意,InputStream 并非是并不是一个接口,而是所有字节输入流所有类的父类。下面我们主要以 FileInputStream 来举例,所谓 FileInputStream,就是从文件流中读取数据,然后将数据从文件中读取到内存,常用方法如下:

| 返回值 | 方法 | 描述 |

| — | — | — |

| int | available() | 返回该输入流中可以读取的字节数的估计值 |

| void | close() | 关闭输入流并释放相关资源 |

| int | read(bytep[] b) | 从输入流读取一些字节数,并将其存储到缓冲区 b |

下面是一个从文件中读取数据到内存中的实例,文件内容如下:

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : TestInputStream

  • @date : 2021/4/20 15:29

  • @description : InputStream 实例

*/

public class TestInputStream {

public static void main(String[] args) {

String result = null;

File file = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/1.txt”);

try (InputStream inputStream = new FileInputStream(file)) {

// 读取输入流中可以被读的 bytes 估计值

int size = inputStream.available();

// 根据 bytes 数创建数组

byte[] array = new byte[size];

// 数据读取到数组

inputStream.read(array);

// 数组转化为字符串

result = new String(array);

} catch (IOException e) {

e.printStackTrace();

}

// 打印字符串

System.out.println(result);

}

}

OutputStream

OutputStream 并非是并不是一个接口,而是所有输出字节流的所有类的父类。下面我们主要以 FileOutputStream 来举例,所谓 FileOutputStream,就是从内存中读取数据,然后将数据从内存存放到文件中,常用方法如下:

| 返回值 | 方法 | 描述 |

| — | — | — |

| void | write(byte[] b) | 将 b.length 个字节从指定字节数组写入此文件输出流 |

| void | close() | 关闭文件输出流并释放相关资源 |

import java.io.*;

/**

  • @author : cunyu

  • @version : 1.0

  • @className : TestOutputStream

  • @date : 2021/4/20 15:58

  • @description : OutputStream 实例

*/

public class TestOutputStream {

public static void main(String[] args) {

File file = new File(“D:/PersonalFiles/github/githubCodes/IDEA/TheWay2Java/IOStream/data/2.txt”);

String content = “这是一个 OutputStream 实例!”;

try (OutputStream outputStream = new FileOutputStream(file)) {

// 字符串转换为 byte 数组

byte[] array = content.getBytes();

// 写入数据

outputStream.write(array);

} catch (IOException e) {

e.printStackTrace();

}

System.out.println(“写入成功”);

}

}

需要注意的点:

  • 字节流写入数据时如何实现换行?

写入换行的转义字符的字节数组即可,但是需要注意,不同系统下换行的转义字符不同,Windows 下为 \r\n,macOS 下为 \r,而 Linux 下为 \m

  • 字节流写入数据时如何实现追加?

调用 public FileOutputStream(String name, boolean append) 这个构造方法即可,当 appendtrue 时,表示追加,默认情况下是 false,表示不追加。

Java高频面试专题合集解析:

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

更多Java架构进阶资料展示

本文已被收录

lic FileOutputStream(String name, boolean append)这个构造方法即可,当appendtrue时,表示追加,默认情况下是false`,表示不追加。

Java高频面试专题合集解析:

[外链图片转存中…(img-JtvxUj9w-1715351271633)]

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

[外链图片转存中…(img-maFMj6jx-1715351271634)]

更多Java架构进阶资料展示

[外链图片转存中…(img-aQ3pYe69-1715351271634)]

[外链图片转存中…(img-Tb1Mlt0a-1715351271634)]

[外链图片转存中…(img-myOqcKCl-1715351271635)]

本文已被收录

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务