J2SE 8的输入输出--读取/写入文本文件和读取/写入二进制数据
读取/写入文本文件
// 1. 文本输入
// (1) 短小文本直接转入字符串
String string = new String(Files.readAllBytes(Paths.get("E:\\111.txt")), StandardCharsets.UTF_8);
System.out.println(string);
System.out.println();
// (2) 按行读取Files.readAllLines() -> List<String>
List<String> strings = Files.readAllLines(Paths.get("E:\\111.txt"), StandardCharsets.UTF_8);
System.out.println(strings);
System.out.println();
// (3) 文件太大可以转换为Files.lines() -> Stream<String>
Stream<String> lines = Files.lines(Paths.get("E:\\111.txt"), StandardCharsets.UTF_8);
lines.forEach(n -> System.out.println(n));
System.out.println();
// (4) 常规方法 BufferedReader.readLine()
String line = null;
String total = "";
try (BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream("E:\\111.txt"), StandardCharsets.UTF_8))) {
while ((line = bufferedReader.readLine()) != null) {
total = total + line + File.separator;
}
}
System.out.println(total);
System.out.println();
// (5) 常规方法->流 BufferedReader.lines()
try (BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream("E:\\111.txt"), StandardCharsets.UTF_8))) {
Stream<String> lines2 = bufferedReader.lines();
lines2.forEach(n -> System.out.println(n));
}
// 2. 文本输出
// (1)常规输出 BufferedWriter->OutputStreamWriter->FileOutputStream
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\222.txt")))) {
bw.write("文本输出");
bw.write("文本输出");
bw.write("文本输出");
}
// (2) 使用 FileWriter
try (FileWriter fileWriter = new FileWriter("E:\\222.txt")) {
fileWriter.write("文本输出");
fileWriter.write("文本输出");
fileWriter.write("文本输出");
}
// (3) 使用 PrintWriter println()可以自动换行
try (PrintWriter printWriter = new PrintWriter("E:\\222.txt")) {
printWriter.write("文本输出");
printWriter.write("文本输出");
printWriter.write("文本输出");
printWriter.println("文本输出");
printWriter.println("文本输出");
printWriter.println("文本输出");
}
// 3. 从控制台读入
try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))){
String tempLine = null;
while((tempLine=bufferedReader.readLine())!=null && !tempLine.contains("exit")){
System.out.println(tempLine);
}
}
// 4. 通过System.out传入文本
PrintStream defaultOut = System.out;
System.setOut(new PrintStream("E:\\333.txt"));
System.out.println("文本输出");
System.setOut(defaultOut);
// 5. 字符集
// (1) 默认字符集
System.out.println(Charset.defaultCharset());
// (2) 可用字符集
// SortedMap<String, Charset> availableCharsets =
// Charset.availableCharsets();
// availableCharsets.entrySet().forEach(n->System.out.println(n.getKey()+" "+n.getValue()));
// (3) 指定字符集
Charset utf_8 = StandardCharsets.UTF_8;
utf_8 = Charset.forName("UTF-8");
读取/写入二进制文件
// 6.写入二进制文件
try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("E:\\111.data"))) {
dataOutputStream.writeChars("二进制文本");
}
System.out.println();
// 7.读取二进制文件
try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("E:\\111.data"))) {
//available() 在不阻塞的情况下,可以获取的字节数
while (0 != dataInputStream.available()) {
System.out.println(dataInputStream.readChar());
}
}
随机文件访问
// 8. 随机文件访问
// (1) 二进制写入文件
try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("E:\\222.data"))) {
writeFixedString("空白处", 20, dataOutputStream);
writeFixedString("随机文件访问1", 30, dataOutputStream);
writeFixedString("随机文件访问2", 40, dataOutputStream);
dataOutputStream.writeDouble(88.88);
dataOutputStream.writeInt(88);
}
// (2) 二进制读取文件
try (RandomAccessFile randomAccessFile = new RandomAccessFile("E:\\222.data", "r")) {
System.out.println(randomAccessFile.length());
// 中文占两个字节
//seek() 离开始跳出的字节数
randomAccessFile.seek(20 * 2);
//getFilePointer() 当前位置
System.out.println(randomAccessFile.getFilePointer());
System.out.println("readFixedString:" + readFixedString(30, randomAccessFile));
System.out.println("readFixedString:" + readFixedString(40, randomAccessFile));
System.out.println(randomAccessFile.readDouble());
System.out.println(randomAccessFile.readInt());
}
// (3) byte写入文件
try (RandomAccessFile randomAccessFile = new RandomAccessFile("E:\\333.data", "rw")) {
// 不能使用writeBytes(), writeBytes(b, 0, len) len是字符串的length;
// 而write()是bytes的length
// randomAccessFile.writeBytes(s);
randomAccessFile.write("随机文件访问2".getBytes());
randomAccessFile.write("随机文件访问sss3".getBytes());
}
// (4) byte读取文件
try (RandomAccessFile randomAccessFile = new RandomAccessFile("E:\\333.data", "rw")) {
int x = "随机文件访问2".getBytes().length;
byte[] b = new byte[x];
System.out.println(new String(b));
int y = "随机文件访问sss3".getBytes().length;
b = new byte[y];
randomAccessFile.read(b);
System.out.println(new String(b));
// 从指定位置读取文件的功能
b = new byte[1024];
int hasRead = 0;
while ((hasRead = randomAccessFile.read(b)) > 0) { //只要能够读出来,就一直读
System.out.print(new String(b, 0, hasRead));
}
}
// (5)在文档末尾加字符
try (RandomAccessFile randomAccessFile = new RandomAccessFile("E:\\111.txt", "rw")) {
//跳至文件末尾
randomAccessFile.seek(randomAccessFile.length());
randomAccessFile.writeBytes("The appended string");
}
System.out.println();
操作Zip文档
// 9. 操作Zip文档
//(1) 读取zip文档 ZipInputStream-->getNextEntry() ZipFile-->getInputStream()
try(InputStream in = new FileInputStream("E:\\111.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
ZipFile zipFile = new ZipFile("E:\\111.zip");){
ZipEntry entry = null;
while((entry = zipInputStream.getNextEntry()) != null){
try(InputStream inputStream = zipFile.getInputStream(entry);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(inputStreamReader);){
System.out.println("ZipEntry "+entry.getName());
br.lines().forEach(n->System.out.println(n));
}
zipInputStream.closeEntry();
}
}
//(2) 写入zip文档 ZipOutputStream-->putNextEntry
try(OutputStream outputStream= new FileOutputStream("E:\\222.zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);){
zipOutputStream.putNextEntry(new ZipEntry("writeToZipFile1.txt"));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream (zipOutputStream) ;
bufferedOutputStream.write("writeToZipFile1.txt test中文".getBytes());
bufferedOutputStream.flush();
zipOutputStream.putNextEntry(new ZipEntry("writeToZipFile2.txt"));
bufferedOutputStream.write("writeToZipFile2.txt test中文".getBytes());
bufferedOutputStream.flush();
zipOutputStream.putNextEntry(new ZipEntry("writeToZipFile3.txt"));
bufferedOutputStream.write("writeToZipFile3.txt test中文".getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
J2SE 8的输入输出--读取/写入文本文件和读取/写入二进制数据的更多相关文章
- (第二章第三部分)TensorFlow框架之读取二进制数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
- 【MATLAB】读取和写入文本文件
在MATLAB中,来读取和写入文本文件是很简单的事.下面,就来简单介绍下.如果有其他问题,请留言. 一.读取文本文件 思路: 1.用fopen来打开一个文件句柄 2.用fgetl来获得文件中的一行,如 ...
- C#中使用StreamReader实现文本文件的读取与写入
场景 实现一个 TextReader,使其以一种特定的编码从字节流中读取字符. 关注公众号霸道的程序猿获取编程相关电子书.教程推送与免费下载. 大量编程视频教程:https://space.bilib ...
- Javascript写入txt和读取txt文件的方法
文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...
- python 将字节写入文本文件
想在文本模式打开的文件中写入原始的字节数据 将字节数据直接写入文件的缓冲区即可 >>> import sys >>> sys.stdout.write(b'Hell ...
- java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...
- 写入文本文件时“\n”不是回车换行而是个方块“■”的解决方法
用“\n”写入文本文件时,打开文本文件显示的为什么不是回车换行而是个黑方块“■”,但用file()读取时还是认为是一行一行的? 首先在WINDOWS里回车换行是"\r\n"; 而L ...
- asp.net 读取一个文本文件,并输出到网页显示 通过 一般处理程序实现
asp.net 读取一个文本文件,并输出到网页显示 通过 一般处理程序实现 用这个可以做模板首页进行输出,也可以自已自定义进行扩展 //得到读取到的文本到string中 string resultTe ...
- Android 建立文件夹、生成文件并写入文本文件内容
一.首先添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">& ...
随机推荐
- Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程
1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...
- git server side hook 试用
git 的hook 是一个很方便的功能,我们可以使用hook 做好多处理,比如client side hook 进行 提交格式校验,server side 进行ci/cd 处理 测试使用docker- ...
- 作为一名IT从业者,你在工作和学习中,遇到哪些问题
版权声明:襄阳雷哥的版权声明 https://blog.csdn.net/FansUnion/article/details/28448975 大家都是IT从业者,遇到的问题多少与类似. 假设能把这些 ...
- 00.嵌入式Linux开发环境搭建
3.虚拟机上网配置 虚拟机如果要从网上获取资源,就要能够访问外网.虚拟机有三种上网方式:桥接上网,NAT上网,单主机模式[没用过].本节从原理和操作2个方面讲了NAT方式和桥接方式这2种不同的虚拟机 ...
- mysql之 远程连接 mysql 很慢,本地连接 mysql 很快 (skip-name-resolve)
症状:,远程连接 mysql 很慢,但是 本地连接 mysql 很快, ping 和 route 网络通信都是正常的. 解决:mysql 的配置文件中增加如下配置参数:[mysqld]skip-nam ...
- php如何分割字符串?php mb_substr分割字条串,解决中文乱码问题,支持分割中文! (转)
因为网站开发需要,必须有一项功能可以把字符串一个一个分割开来,并且转换为数组. 刚开始用“str_split函数”在实验分割中文字符时就出现了乱码. 蚂蚁学院经过一翻研究,最终发现以下方法可以有效分割 ...
- Rect参数的简易理解方式
以屏幕左上角为原点开始计算 向下 和 向右均为整数 new Rect(left, top, right, bottom) Rect参数的意思代表的是矩形的左上角的坐标(left.top)和右下角的坐标 ...
- FPGA将加速今日新型态数据中心的主流应用
在这个强调智能与联网的时代,可编程逻辑栅阵列 (FPGA)已经成为一个重要且不可或缺的元件.以全球500亿个联网设备,一年所产生的数据量将不计其数.从数据中心.5G通讯.虚拟网络功能,到嵌入式系统,F ...
- ubuntu修改Bash命令行提示符
用户通过远程登陆,初始的PS1为\s-\v\$, bash为/bin/bash,然后先后执行/etc/profile和~/.bash_profile中的命令. /etc/profile文件中调用执行/ ...
- 1077 Kuchiguse (20 分)
1077 Kuchiguse (20 分) The Japanese language is notorious for its sentence ending particles. Personal ...