how2j.cn


工具版本兼容问题
Reader字符输入流
Writer字符输出流
专门用于字符的形式读取和写入数据


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



2分14秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : 使用字符流读取文件   
步骤 2 : 使用字符流把字符串写入到文件   
步骤 3 : 练习-文件加密   
步骤 4 : 答案-文件加密   
步骤 5 : 练习-文件解密   
步骤 6 : 答案-文件解密   

步骤 1 :

使用字符流读取文件

edit
FileReader 是Reader子类,以FileReader 为例进行文件读取
package stream; import java.io.File; import java.io.FileReader; import java.io.IOException; public class TestStream { public static void main(String[] args) { // 准备文件lol.txt其中的内容是AB File f = new File("d:/lol.txt"); // 创建基于文件的Reader try (FileReader fr = new FileReader(f)) { // 创建字符数组,其长度就是文件的长度 char[] all = new char[(int) f.length()]; // 以字符流的形式读取文件所有内容 fr.read(all); for (char b : all) { // 打印出来是A B System.out.println(b); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 2 :

使用字符流把字符串写入到文件

edit
FileWriter 是Writer的子类,以FileWriter 为例把字符串写入到文件
使用字符流把字符串写入到文件
package stream; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class TestStream { public static void main(String[] args) { // 准备文件lol2.txt File f = new File("d:/lol2.txt"); // 创建基于文件的Writer try (FileWriter fr = new FileWriter(f)) { // 以字符流的形式把数据写入到文件中 String data="abcdefg1234567890"; char[] cs = data.toCharArray(); fr.write(cs); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 3 :

练习-文件加密

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。
设计一个方法

public static void encodeFile(File encodingFile, File encodedFile);

在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。
加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0
字母字符:
如果是非z字符,向右移动一个,比如d变成e, G变成H
如果是z,z->a, Z-A。
字符需要保留大小写
非字母字符
比如',&^ 保留不变,中文也保留不变
建议: 使用以前学习的练习题中的某个Java文件,比如循环练习,就有很多的字符和数字
练习-文件加密
步骤 4 :

答案-文件加密

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

10分32秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


答案-文件加密
package stream; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestStream { /** * * @param encodingFile * 被加密的文件 * @param encodedFile * 加密后保存的位置 */ public static void encodeFile(File encodingFile, File encodedFile) { try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(encodedFile)) { // 读取源文件 char[] fileContent = new char[(int) encodingFile.length()]; fr.read(fileContent); System.out.println("加密前的内容:"); System.out.println(new String(fileContent)); // 进行加密 encode(fileContent); // 把加密后的内容保存到目标文件 System.out.println("加密后的内容:"); System.out.println(new String(fileContent)); fw.write(fileContent); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void encode(char[] fileContent) { for (int i = 0; i < fileContent.length; i++) { char c = fileContent[i]; if (isLetterOrDigit(c)) { switch (c) { case '9': c = '0'; break; case 'z': c = 'a'; break; case 'Z': c = 'A'; break; default: c++; break; } } fileContent[i] = c; } } public static boolean isLetterOrDigit(char c) { // 不使用Character类的isLetterOrDigit方法是因为,中文也会被判断为字母 String letterOrDigital = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; return -1 == letterOrDigital.indexOf(c) ? false : true; } public static void main(String[] args) { File encodingFile = new File("E:/project/j2se/src/Test1.txt"); File encodedFile = new File("E:/project/j2se/src/Test2.txt"); encodeFile(encodingFile, encodedFile); } }
步骤 5 :

练习-文件解密

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
解密在文件加密中生成的文件。
设计一个方法

public static void decodeFile(File decodingFile, File decodedFile);

在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
解密算法:
数字:
如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
如果是0的数字,变成9
字母字符:
如果是非a字符,向左移动一个,比如e变成d, H变成G
如果是a,a->z, A-Z。
字符需要保留大小写
非字母字符:
比如',&^ 保留不变,中文也保留不变
练习-文件解密
步骤 6 :

答案-文件解密

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

2分7秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


答案-文件解密
package stream; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestStream { /** * * @param decodingFile * 被解密的文件 * @param decodedFile * 解密后保存的位置 */ public static void decodeFile(File decodingFile, File decodedFile) { try (FileReader fr = new FileReader(decodingFile); FileWriter fw = new FileWriter(decodedFile)) { // 读取源文件 char[] fileContent = new char[(int) decodingFile.length()]; fr.read(fileContent); System.out.println("源文件的内容:"); System.out.println(new String(fileContent)); // 进行解密 decode(fileContent); System.out.println("解密后的内容:"); System.out.println(new String(fileContent)); // 把解密后的内容保存到目标文件 fw.write(fileContent); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void decode(char[] fileContent) { for (int i = 0; i < fileContent.length; i++) { char c = fileContent[i]; if (isLetterOrDigit(c)) { switch (c) { case '0': c = '9'; break; case 'a': c = 'z'; break; case 'A': c = 'Z'; break; default: c--; break; } } fileContent[i] = c; } } public static boolean isLetterOrDigit(char c) { // 不使用Character类的isLetterOrDigit方法是因为,中文也会被判断为字母 String letterOrDigital ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; return -1 == letterOrDigital.indexOf(c) ? false : true; } public static void main(String[] args) { File decodingFile = new File("E:/project/j2se/src/Test2.txt"); File decodedFile = new File("E:/project/j2se/src/Test1.txt"); decodeFile(decodingFile, decodedFile); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-10-17 来了老弟
楚奕smile



加密和加密
   public static void main(String[] args) {
        File f1 = new File("F:\\temp\\haoduo\\aiyaaiya.txt");
        File f2 = new File("F:\\temp\\haoduo\\123.txt");
        File f3 = new File("F:\\temp\\haoduo\\456.txt");
        encodeFile(f1, f2);
        decodeFile(f2, f3);
    }
    public static void encodeFile(File encodingFile, File encodedFile) {
        try (FileReader fr = new FileReader(encodingFile)) {
            char[] content = new char[(int) encodingFile.length()];
            fr.read(content);
            char[] encodedcontent = new char[(int) encodingFile.length()];
            for (int i = 0; i < content.length; i++) {
                encodedcontent[i] = encode(content[i]);
            }
            try (FileWriter fw = new FileWriter(encodedFile)) {
                fw.write(encodedcontent);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void decodeFile(File encodedFile, File encodingFile) {
        try (FileReader fr = new FileReader(encodedFile)) {
            char[] encodedcontent = new char[(int) encodedFile.length()];
            fr.read(encodedcontent);
            char[] content = new char[(int) encodedFile.length()];
            for (int i = 0; i < encodedcontent.length; i++) {
                content[i] = decode(encodedcontent[i]);
            }
            try (FileWriter fw = new FileWriter(encodingFile)) {
                fw.write(content);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static char encode(char c) {
        if (isLetterOrDigit(c)) {
            switch (c) {
                case '9':
                    c = '0';
                    break;
                case 'z':
                    c = 'a';
                    break;
                case 'Z':
                    c = 'A';
                    break;
                default:
                    c++;
                    break;
            }
        }
        return c;
    }

    public static char decode(char c) {
        if (isLetterOrDigit(c)) {
            switch (c) {
                case '0':
                    c = '9';
                    break;
                case 'a':
                    c = 'z';
                    break;
                case 'A':
                    c = 'Z';
                    break;
                default:
                    c--;
                    break;
            }
        }
        return c;
    }

    public static boolean isLetterOrDigit(char c) {
        String LetterOrDigit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        return -1 == LetterOrDigit.indexOf(c) ? false : true;
    }

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-10-12 交作业-解密
小企业哒



将加密的方式反过来,修改即可得到解密的方法
public class HomeWork2 {

	// 练习-解密

	// 在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中.
	// 加解密算法:
	// 数字:
	// 如果不是0,在原来的基础上减1
	// 如果是0,变成9
	// 字母字符:
	// 如果是a,a->z, A->Z
	// 如果是非a字符,向左移动1
	// 字符需要保留大小写
	// 非字母字符:
	// 保留不变,中文也保留不变

	public static void main(String[] args) {

		File f1 = new File("d:\\Dota\\AfterTheEncrypt.txt");
		File f2 = new File("d:\\Dota\\AfterTheDecode.txt");

		decodeFile(f1, f2);
	}

	private static void decodeFile(File decodingFile, File decodedFile) {
		// 判断源文件是否存在
		if (!decodingFile.exists()) {
			System.err.println("警告:源文件不存在,请检查!");
			return;
		}
		// 创建字符流进行读写
		try (FileReader fr = new FileReader(decodingFile); FileWriter fw = new FileWriter(decodedFile)) {
			// 创建字符数组,长度为源文件长度
			char[] array = new char[(int) decodingFile.length()];
			// 读取源文件内容
			fr.read(array);

			String str = new String(array);
			System.out.printf("解码前的内容为:%n%s%n", str.trim());
			// 对读取的内容进行解密
			decide(array);

			String strNew = new String(array);
			System.out.printf("解码后的内容为:%n%s%n", strNew.trim());
			// 将解密后的内容写入到数组中
			fw.write(array);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 解密方法
	private static void decide(char[] array) {
		for (int i = 0; i < array.length; i++) {
			char mark = array[i];
			if (isDigitOrLetter(mark)) {

				mark = isSpecialCharacters(mark);
				array[i] = mark;

			} else {
				array[i] = mark;
			}
		}
	}

	// 判断是否为字母或数字
	private static boolean isDigitOrLetter(char c) {
		String mark = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		if (mark.contains(String.valueOf(c))) {
			return true;
		}
		return false;
	}

	// 判断是否为9;a;A字符
	private static char isSpecialCharacters(char c) {

		switch (c) {
		case '0':
			c = '9';
			break;
		case 'a':
			c = 'z';
			break;
		case 'A':
			c = 'Z';
			break;

		default:
			c--;
			break;
		}
		return c;
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-10-11 解密
2019-10-11 交作业-加密
2019-10-10 文件解密与加密
2019-10-09 return -1 == letterOrDigital.indexOf(c) ? false : true; 为什么是-1?
2019-10-05 文件加密
2019-09-20 关闭流放到try里面报错
2019-09-16 作业-文件加解密
2019-09-05 文件解密
2019-09-05 文件加密
2019-09-02 其他都行就是中文不行
2019-09-01 交作业
2019-09-01 加密文件
2019-08-20 你系腚了。
2019-08-20 提交解密 作业
2019-08-19 交作业
2019-08-19 交作业,结合了之前的对象知识,熟悉了下
2019-08-14 为什么后面会出现一些框
2019-08-01 作业:文件解密
2019-08-01 作业:文件解密
2019-08-01 提交作业
2019-08-01 作业:文件加密
2019-07-26 交作业-文件加密
2019-06-27 关于步骤 3 : 练习-文件加密
2019-06-12 中文好像有点怪
2019-06-10 字符流:输入、输出。
2019-06-05 加密解密
2019-06-04 加密文件
2019-06-04 练习-文件加密与解密
2019-05-26 ZZ交作业 字符流 加密/解密文件
2019-05-26 交作业 第二题,欢迎讨论
2019-05-26 第一题 加密字符
2019-05-22 文件解密
2019-05-22 文件加密
2019-04-28 交作业
2019-04-20 大表哥的作业-文件加密 欢迎参考
2019-04-18 交作业(一),欢迎暂时没思路的朋友来交流参考
2019-04-15 交作业加密与解密文件
2019-04-12 请多指教
2019-04-11 交作业~~中文乱码问题下节解决233333
2019-04-04 交作业
2019-03-27 运行之后文件内容为空
2019-03-15 加密过后 中文变了是咋回事????
2019-03-15 加密的问题
2019-03-13 简单的加密
2019-03-06 作业:加密、解密文件(使用缓冲流)
2019-03-06 作业:加密、解密文件(使用缓冲流)
2019-02-23 作业
2019-02-22 作业 解密 加密
2019-01-31 交作业-文件加密
2019-01-27 交作业
2019-01-23 交作业
2019-01-20 文件加密 我去搞了好久
2019-01-09 为什么The resource type FileReader does not implement java.lang.AutoCloseable
2019-01-05 为什么decode中if不配合else?加了elese就解密不了了
2019-01-05 怎么回事,一运行加密,文件内容就空了,就是答案里的加密代码啊
2018-12-02 加密文件作业
2018-11-26 作业
2018-11-23 交作业
2018-11-23 文件加密
2018-11-21 中文加密,解密时出现乱码
2018-11-15 交作业
2018-10-17 不要随便在try代码块里写代码。。。
2018-10-11 作业
2018-10-11 这句代码是什么意思?
2018-09-16 编码
2018-09-12 加密作业
2018-09-08 坚持交作业!!!
2018-08-28 提交作业
2018-08-23 交作业,自己写的,容易理解
2018-08-18 关于空格和read方法的问题
2018-08-18 交一下加密的作业,写的不够简洁
2018-07-31 检查一下
2018-07-30 第五题作业
2018-07-30 第四题作业
2018-07-30 第四题作业
2018-07-30 作业
2018-07-28 交作业
2018-07-20 作业加密未完善
2018-07-18 为啥加解密一次最后就会多几个空格呢?请大神帮忙解释下,感谢不尽
2018-07-08 加密问题 输出 后有一个方框,文本里没有
2018-07-01 交作业(解密,加密)
2018-06-29 文件加密
2018-06-12 使用加密和解密写入文件后会文件最后会多出一些非法字符,为什么?
2018-06-11 交作业
2018-05-12 为啥我测试读文件汉字出来是乱码
2018-04-16 解密思路其实就是另一种变相的加密
2018-04-14 加密
2018-04-03 这里用增强循环为什么不可以?
2018-03-26 加密答案