我正在修改一些现有的java代码,当前使用以下过程:
- 打开 FileInputStream 以从磁盘读取文件。
- 将 FileInputStream 传递到 DataInputStream 的构造函数
- 将 DataInputStream 中的数据读入字节数组
- 基于字节数组创建 Apache Commons ByteArrayPartSource
- 基于 ByteArrayPartSource 创建 Apache Commons FilePart。
- 基于 FilePart 创建 Apache Commons MultipartRequestEntity。
- 调用需要 MultipartRequestEntity 作为其参数的外部 API。
我正在尝试通过添加代码来扫描输入文件并搜索/替换文本字符串来修改此过程。例如,它可能会扫描文件中的模式“abc”并将其替换为“xyz”。但是,我不确定应该将此修改添加到哪一步。我选择的步骤对性能有影响吗?是否可以在内存中进行搜索/替换而不将输入文件写入临时区域?
谢谢。
最佳答案
如果您正在读取的文件是文本文件,您可以:
- 使用接受字节数组的字符串构造函数将第 3 步中获得的字节数组转换为字符串
- 使用 replace 或 replaceAll 方法对所述字符串进行搜索和替换操作(需要一些正则表达式知识)
- 使用 getBytes 方法将结果转换回字节数组
- 从第 4 步继续处理
强烈建议您在字符串构造函数和 getBytes 方法中指定文件编码,以避免难以调试的编码问题。
...如果文件是二进制的...我想不出一种方法来搜索和替换其中的文本,抱歉。
关于Java 流操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524501/