来个好玩的小案例
1 package ZY.day09.ZZZ333; 2 3 import java.io.*; 4 import java.util.Scanner; 5 6 public class zbt { 7 public static void main(String[] args) throws IOException { 8 9 Jia("D:\\原神\\Genshin Impact\\Genshin Impact Game\\新建 RTF 文件.rtf"); 10 Jie("D:\\原神\\Genshin Impact\\Genshin Impact Game\\新建 RTF 文件.rtf"); 11 12 13 14 //**需求背景**:为了保证磁盘文件数据的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。 15 // 加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。 16 // 解密原理: 读取加密后的文件,把每个字节数据进行还原,然后将还原后的数据存储的新文件中. 17 // **实现提示**: 18 // 1. 定义两个方法, 一个用来给文件加密(参数是"要加密的文件的绝对路径"), 一个用来给文件解密(参数是"要解密的文件的绝对路径") 19 20 } 21 public static void Jia(String s) throws IOException { 22 //1.把"要加密的原文件的绝对路径"的字符串,转换为"源文件File对象" 23 File Yfile = new File(s); 24 //2.获取"源文件File对象"所在的文件夹getParent 25 String parent = Yfile.getParent(); 26 //3.根据"源文件File对象"创建文件输入流FileInputStream 27 FileInputStream fis = new FileInputStream(Yfile); 28 //4.创建"加密后文件"对象(文件名任意,例如jm.bak,但所在文件夹为"源文件File对象"所在的文件夹) 29 File eFile = new File(parent, "jm.bak"); 30 //5.根据"加密后文件"对象,创建文件输出流FileOutputStream 31 FileOutputStream fos = new FileOutputStream(eFile); 32 //6.使用输入流读,使用输出流写,进行文件复制 33 //7.一次读取一个文件 34 int len; 35 while ((len=fis.read())!=-1){ 36 //8.每次读取一个字节后,先加密(比如让每个字节"异或10"),然后再写入 37 fos.write(len^10); 38 } 39 //9.关闭输入流和输出流 40 fis.close(); 41 fos.close(); 42 //10.删除要加密的源文件 43 Yfile.delete(); 44 //11.把"加密后文件"重命名为源文件 45 eFile.renameTo(Yfile); 46 // 加密后文件File对象.renameTo(源文件File对象); 47 48 49 } 50 51 public static void Jie(String a) throws IOException { 52 //1.把"要解密的文件"的字符串,转换为"解密文件File对象" 53 File file = new File(a); 54 //2.获取"解密文件File对象"所在的文件夹getParent() 55 String parent = file.getParent(); 56 //3.根据"解密文件File对象"创建文件输入流FileInputStream 57 FileInputStream f11= new FileInputStream(file); 58 //4.创建"解密后文件"对象(文件名任意,例如jm.bak,但所在文件夹为"解密文件File对象"所在的文件夹) 59 File file1 = new File(parent, "jm.bak"); 60 //5.根据"解密后文件"对象,创建文件输出流FileOutputStream 61 FileOutputStream f22 = new FileOutputStream(file1); 62 //6.使用输入流读,使用输出流写,进行文件复制 63 //7.一次读取一个文件 64 //8.每次读取一个字节后,再次异或(比如还是"异或10"),然后再写入 65 //9.关闭输入流和输出流 66 int len; 67 while ((len=f11.read())!=-1){ 68 f22.write(len^10); 69 } 70 f11.close(); 71 f22.close(); 72 //10.删除"要解密的文件" 73 file.delete(); 74 //11.把"解密后文件"的文件重命名为"要解密的文件" 75 file1.renameTo(file); 76 // file.renameTo(dfile); 77 78 } 79 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)