梦の博客 欢迎来到我的破站
歌曲封面 未知作品

网站已运行 362 天 20 小时 27 分

Powered by Typecho & Sunny

2 online · 58 ms

Title

JAVA代码审计之文件读取/下载

云梦

·

Article

方法一:使用java.nio.file.Files读取文本

1、简述

使用Files类将文件的所有内容读入字节数组。Files类还有一个方法可以读取所有行到字符串列表。Files类是在Java 7中引入的,如果想加载所有文件内容,使用这个类是比较适合的。只有在处理小文件并且需要加载所有文件内容到内存中时才应使用此方法。

方法二:使用java.io.FileReader类读取文本

1、简述

可以使用FileReader获取BufferedReader,然后逐行读取文件。FileReader不支持编码并使用系统默认编码,因此它不是一种java中读取文本文件的非常有效的方法。

方法三:使用java.io.BufferedReader读取文本

1、简述

如果想逐行读取文件并对它们进行处理,那么BufferedReader是非常合适的。它适用于处理大文件,也支持编码。

BufferedReader是同步的,因此可以安全地从多个线程完成对BufferedReader的读取操作。BufferedReader的默认缓冲区大小为:8KB

方法四:使用 Scanner 读取文本

1、简述

如果要逐行读取文件或基于某些java正则表达式读取文件,则可使用Scanner类。

Scanner类使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换成不同类型的值。Scanner类不同步,因此不是线程安全的。

方法五:使用RandomAccessFile断点续传读取文本

1、简述

随机流(RandomAccessFile)不属于IO流,支持对文件的读取和写入随机访问。

首先把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然后通过指向该 byte 数组的光标或索引(即:文件指针 FilePointer)在该数组任意位置读取或写入任意数据。

断点续传是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传或者下载未完成的部分,而没有必要从头开始上传或者下载。

断点续传实现原理:
(1)下载断开的时候,记录文件断点的位置position;
(2)继续下载的时候,通过RandomAccessFile找到之前的position位置开始下载

方式六:使用 commons-io读取文本

1、简述

Commons IO 是 Apache 软件基金会的一个项目,它提供了一组用于处理 I/O 操作的实用工具类。这个库旨在简化 Java 编程中常见的文件和流操作,使开发者能够更轻松地处理文件读写、流操作、文件过滤和目录操作等。

一些 Commons IO 提供的主要功能包括:

文件操作: 提供了一系列用于文件复制、移动、删除和重命名的方法,还包括了获取文件大小、检查文件是否存在等常见操作。

流操作: 提供了用于处理输入和输出流的实用方法,如关闭流、复制流、转换流等。

文件过滤: 提供了一些实用的文件过滤器,可以根据文件名、文件大小、最后修改时间等条件对文件进行过滤。

目录操作: 提供了一些方便的方法来处理目录,如创建目录、列出目录内容等。

文件内容操作: 提供了一些用于读取、写入和比较文件内容的方法。

下面使用 Commons-io 库一行代码文件来实现读取文件。

方法七:使用 Files.readString 读取文本

①、简述

Java 11添加了readString()方法来读取小文件String。官方介绍:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/Files.html #readString(java.nio.file.Path,java.nio.charset.Charset)

②、实现代码

♾️ java 代码:
String content = Files.readString(path, StandardCharsets.US_ASCII);

下载

文件下载到本地实现方法可以使用响应头Content-disposition来控制,也就是说下载这个动作是交给浏览器去操作的。

Content-Disposition 响应头:指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。

♾️ java 代码:
 response.reset();
 response.setContentType("application/octet-stream");
 response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
现在已有 0 条评论,0 人点赞
Comment
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主