跳转至

图片加密,字符计算

一、图片加密

package com.atguigu.exer;

import org.junit.Test;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class PicTest {

//图片的加密

@Test

public void test1() {

FileInputStream fis = null;

FileOutputStream fos = null;

try {

fis = new FileInputStream("爱情与友情.jpg");

fos = new FileOutputStream("爱情与友情secret.jpg");

byte[] buffer = new byte[20];

int len;

while ((len = fis.read(buffer)) != -1) {

for (int i = 0; i < len; i++) {

buffer[i] = (byte) (buffer[i] ^ 5);

}

fos.write(buffer, 0, len);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (fos != null) {

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

//图片的解密

@Test

public void test2() {

FileInputStream fis = null;

FileOutputStream fos = null;

try {

fis = new FileInputStream("爱情与友情secret.jpg");

fos = new FileOutputStream("爱情与友情4.jpg");

byte[] buffer = new byte[20];

int len;

while ((len = fis.read(buffer)) != -1) {

//正确的

for (int i = 0; i < len; i++) {

buffer[i] = (byte) (buffer[i] ^ 5);

}

fos.write(buffer, 0, len);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (fos != null) {

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

二、字符计算

package com.atguigu.exer;

import org.junit.Test;

import java.io.*;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

/**

* 练习3:获取文本上字符出现的次数,把数据写入文件

*

* 思路:

* 1.遍历文本每一个字符

* 2.字符出现的次数存在Map中

*

* Map<Character,Integer> map = new HashMap<Character,Integer>();

* map.put('a',18);

* map.put('你',2);

*

* 3.把map中的数据写入文件

*/

public class WordCount {

/*

说明:如果使用单元测试,文件相对路径为当前module

如果使用main()测试,文件相对路径为当前工程

*/

@Test

public void testWordCount() {

FileReader fr = null;

BufferedWriter bw = null;

try {

//1.创建Map集合

Map<Character, Integer> map = new HashMap<Character, Integer>();

//2.遍历每一个字符,每一个字符出现的次数放到map中

fr = new FileReader("dbcp.txt");

int c = 0;

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

//int 还原 char

char ch = (char) c;

// 判断char是否在map中第一次出现

if (map.get(ch) == null) {

map.put(ch, 1);

} else {

map.put(ch, map.get(ch) + 1);

}

}

//3.把map中数据存在文件count.txt

//3.1 创建Writer

bw = new BufferedWriter(new FileWriter("wordcount.txt"));

//3.2 遍历map,再写入数据

Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();

for (Map.Entry<Character, Integer> entry : entrySet) {

switch (entry.getKey()) {

case ' ':

bw.write("空格=" + entry.getValue());

break;

case '\t'://\t表示tab 键字符

bw.write("tab键=" + entry.getValue());

break;

case '\r'://

bw.write("回车=" + entry.getValue());

break;

case '\n'://

bw.write("换行=" + entry.getValue());

break;

default:

bw.write(entry.getKey() + "=" + entry.getValue());

break;

}

bw.newLine();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

//4.关流

if (fr != null) {

try {

fr.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (bw != null) {

try {

bw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}