java输出的文本内容不对_java 字符串写入文件后再读出不一样?

展开全部

我在你的另外一个同样的问题里62616964757a686964616fe59b9ee7ad9431333337616535面已经回答你了,再次复制代码给你import java.io.*;

// 看了下,该程序想实现用密码password对数据data进行加密,变量名字取得比较乱,所以修改了部分变量名字

public class TestString {

// 定义的shuju数据 和 password密码,可以放到前面

static String data = "6869";

static String password = "xzfd";

public static void main(String[] args) throws Exception {

char s[] = data.toCharArray();

char p[] = password.toCharArray();

int n = s.length;

int m = p.length;

StringBuilder ecodeDataTemp = new StringBuilder();// 建议重新定义一个变量用于存储加密后的字符

// 你的代码str = new String(s); 又把最开始的str变量给覆盖掉了..

for (int k = 0; k 

int temp = s[k] + p[k % m];// 加密的过程

s[k] = (char) temp;

// 把每一个加密后的字符都变成一个uncoide编码进行存储,比如\\ua9,

// 这样的好处,就算是该字符没有可以显示出来的字符,也可以存进去.比如很多的char的值可显示的字符,那么也不怕.

// 你的代码强行把字符存进去,那么如果该字符不存在等情况,可能就会显示出 ?

ecodeDataTemp.append("\\u" + Integer.toHexString(temp));

}

String ecodeData = new String(ecodeDataTemp);

//System.out.println("输出加密的数据到文件:" + ecodeData);

File file = new File("Tesat.txt");

FileWriter fw = new FileWriter(file);

fw.write(ecodeData);

fw.flush();

fw.close();

FileReader fr = new FileReader(file);

String readData = "";

int b;

while ((b = fr.read()) != -1) {

readData = readData + (char) b;

}

fr.close();

//System.out.println("从文件里读取到的数据:"+readData);

StringBuilder decodeDataTemp  = new StringBuilder();

String[] hex = readData.split("\\\\u");// 切割字符成单独的unicode字符

for (int i = 1; i 

int temp = Integer.parseInt(hex[i], 16);

decodeDataTemp.append(((char) temp));

}

char[] es = decodeDataTemp.toString().toCharArray();

for (int k = 0; k 

int temp = es[k] - p[k % m];

es[k] = (char) temp;

}

String decodeData = new String(es);

System.out.println("加密前的数据data : " + data);

System.out.println("加密后的数据data : " + ecodeData);

System.out.println("如果强制解密data : "+decodeDataTemp);

System.out.println("解密后的数据data : " + decodeData);

}

}

数据输出如下加密前的数据data : 6869

加密后的数据data : \uae\ub2\u9c\u9d

如果强制解密data : ????

解密后的数据data : 6869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值