1. 目标:给文件加密、解密(最基础版)
  2. 注意:
    a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件
    b.解密过程:先读取整个加密文件,然后将加密文件写入一个新的文件中,在写入的过程中,每隔几个字符(与加密时一致)跳过加密符号,然后继续写入,继续跳过,最终,这个新的文件就是解密文件
    c.文本文件加解密可以使用字节流或字符流,图片、视频、音频等文件只能用字节流
  3. 代码
package May.Tenth.IO_Buffered;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;/*** 给文件加密和解密* * @author Jia**/
public class EncryptionAndDecipherFile {String sign = "###";public static void main(String[] args) {new EncryptionAndDecipherFile().encryptionFile("E:/Javatest/3.txt", "E:/Javatest/1");new EncryptionAndDecipherFile().decipher("E:/Javatest/1/加密版3.txt", "E:/Javatest/1");System.out.println("over");}// 加密方法public void encryptionFile(String path1, String path2) {// 添加目标文件的对象File file = new File(path1);// 为加密文件设置存储路径path2 = path2 + "/" + "加密版" + file.getName();// 判断目标对象是否存在if (file.exists()) {// 声明缓冲字符输入流BufferedReader br = null;// 声明缓冲字符输出流BufferedWriter bw = null;try {// 创建缓冲字符输入流br = new BufferedReader(new FileReader(file));// 创建缓冲字符输出流bw = new BufferedWriter(new FileWriter(path2));// 循环读取数据String str = null;while ((str = br.readLine()) != null) {int i = 0;int b = 2;// 循环给目标文件添加加密符号while (i < str.length() || i == str.length()) {// 判断i+b 是否会大于str的长度,若是,则改变b的大小,保证不会溢出if ((i + b) > str.length()) {b = str.length() - i;}// 写入部分数据bw.write(str, i, b); // 添加加密符号bw.write(sign);// 改变i的大小,2表示每隔2个字符添加一个加密符号i = i + 2; // 强制刷新bw.flush();}// 换行bw.newLine();}} catch (IOException e) {e.printStackTrace();} finally {try {// 关闭输入输出流bw.close();br.close();System.out.println("文件加密成功!");} catch (IOException e) {e.printStackTrace();}}} else {System.out.println("目标文件不存在!");}}// 解密方法public void decipher(String path1, String path2) {// 创建已加密文件的对象File file = new File(path1);// 为解密文件创建路径path2 = path2 + "/" + "解密版" + file.getName().replaceAll("加密版", "");// 判断文件是否存在if (file.exists()) {// 声明缓冲字符输入流BufferedReader br = null;// 声明缓冲字符输出流BufferedWriter bw = null;try {// 创建缓冲字符输入流br = new BufferedReader(new FileReader(file));// 创建缓冲字符输出流bw = new BufferedWriter(new FileWriter(path2));// 循环读取加密文件String str = null;// 循环给加密文件去掉加密符号while ((str = br.readLine()) != null) {// 判断每行最后是否有加密字符将加密符号删掉if (str.endsWith(sign)) {str = str.substring(0, str.length() - sign.length());}// 循环写入int i = 0;int b = 2;while (i < str.length() || i == str.length()) {// 判断i+b是否大于str的长度,若大于,应改变b的大小,使调用write方法输出时,不会大于str长度if ((i + b) > str.length()) {b = str.length() - i;}// 将数据写出bw.write(str, i, b);// 改变i的大小,使下次写出时能够跳过加密字符i = i + 2 + sign.length();// 强制刷新bw.flush();}// 换行bw.newLine();}} catch (IOException e) {e.printStackTrace();} finally {try {// 关闭输入输出流bw.close();br.close();System.out.println("文件解密成功!");} catch (IOException e) {e.printStackTrace();}}} else {System.out.println("加密文件未找到!");}}
}

Java基础篇之利用IO流给文件加密、解密相关推荐

  1. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  2. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)

    菜鸟学习笔记:Java IO流2--其他流 字节数组输入输出流 数据类型处理流 基本数据类型 引用类型 打印流 System.in.System.out.System.err 随机流RandomAcc ...

  3. Java裁剪音乐,利用IO流

    ** Java裁剪音乐,利用IO流 ** 主方法 public static void main(String[] args) throws IOException {//输入流对象,路径要裁剪文件路 ...

  4. Java基础知识回顾之六 ----- IO流

    前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...

  5. 利用IO流一次性读取文件中的所有内容,利用IO流下载文件

    利用IO流一次性读取文件中的所有内容 读取文件效率最快的方法就是一次全读进来,使用readline()之类的方法,可能需要反复访问文件,而且每次readline()都会调用编码转换,降低了速度,所以, ...

  6. Java基础(三)IO流和对象流

    文件及IO流 File类 1.来自于java.io包 2.是文件和目录路径名的抽象表示 3.文件和目录可以通过File封装为对象 4.对于File而言,封装的不是真正存在的文件,仅仅是封装一个路径,路 ...

  7. Java基础(19)IO流

    十九.IO流 持久化:将内存中的数据  输出到其他设备中(比如硬盘),用于长时间保持数据 流:数据传输的管道或通道 i是in的缩写表示输入,o是out的缩写表示输出,io则表示了两个不同方向流 一般的 ...

  8. 【七】Java基础(06)---IO流

    一.File 类的使用 1.file类的一个对象,代表一个文件或一个文件目录 2.file类声明在java.io包下 Public class FileTest{ /* 创建File类的实例 2.相对 ...

  9. Java基础知识强化之IO流笔记42:IO流总结(图解)

    1. IO流总结(图解) 转载于:https://www.cnblogs.com/hebao0514/p/4868913.html

最新文章

  1. TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录
  2. WSS 扩展文件夹的属性--如何给文件夹添加扩展字段
  3. 云原生人物志|华为云CTO张宇昕:云原生已经进入深水区
  4. 结合PE格式对linker分析1
  5. 监督学习之knn、naive bayes、决策树算法实验_机器学习基本概念
  6. 助农两年销量千万 “李佳琦公益”实现“造血式”帮扶
  7. jsp查询不到mysql内容_java查询到mysql数据库的数据,jspbean查询不到
  8. nginx connect() to (13: Permission denied) while connecting
  9. JavaWeb POI 导出Excel
  10. 顺序结构-计算标准体重
  11. Qt小游戏CoinFlip翻金币
  12. 家庭装修是找设计师和施工队好,还是找装修公司好呀
  13. 如何申请腾讯云免费ssl证书并部署
  14. php卡片式,卡片式设计的优点和不适用性
  15. 【Linux操作】常用命令整理(持续更新中...)
  16. DW大学生网页作业制作设计 ——旅游门户网站(21页)HTML+CSS+JavaScript
  17. K-近邻算法之K值的选择(带案例)
  18. PowerDesigner 修改table的颜色
  19. Javascript:一个屌丝的逆袭
  20. Java - 调用 Shell 命令和脚本

热门文章

  1. filecoin-存储证明子系统(rust-fil-proofs)[翻译]
  2. numpy.arctan, math.atan, math.atan2的区别
  3. PredRNN++:网络结构和代码解读
  4. 国务院发展研究中心发布《中国云计算产业发展与应用白皮书》| 附下载
  5. Python+Selenium练习篇13-设置浏览器下载文件默认地址
  6. FTTH网速慢解决方案
  7. 获取svg元素的高度和宽度(或其他属性)
  8. 四足机器人仿真 Matlab
  9. android配置参数详解,安卓手机CPU与GPU等配置参数含义详解【详细介绍】
  10. 四管前级怎么去掉高低音音调_烧友自荐:2SK304四管前级制作难点浅析