Java中的IO流使用的是Decorator设计模式
创新互联公司致力于互联网网站建设与网站营销,提供成都网站制作、成都网站设计、外贸营销网站建设、网站开发、seo优化、网站排名、互联网营销、重庆小程序开发、公众号商城、等建站开发,创新互联公司网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。
所以只要写两个装饰者类
覆盖write和read方法
在write前和read后对原数据进行一些处理(比如异或操作)就可以了
我吃过饭写个贴上来……
--------------------------------------------------------
// EncryptStream.java
import java.io.IOException;
import java.io.OutputStream;
/**
*
* 类型描述 加密流
*
* @since 2009-5-22
* @author 何智刚
*
*/
public class EncryptStream extends OutputStream {
private byte key;
private OutputStream out;
/**
*
* @param key 密钥
* @param in 需要加密的流
*/
public EncryptStream(byte key, OutputStream out) {
this.key = key;
this.out = out;
}
@Override
public void write(int b) throws IOException {
out.write(b ^ key);
}
}
// DecryptStream.java
import java.io.IOException;
import java.io.InputStream;
/**
*
* 类型描述 解密流
*
* @since 2009-5-22
* @author 何智刚
*
*/
public class DecryptStream extends InputStream {
private byte key;
private InputStream in;
/**
*
* @param key 密钥
* @param in 需要解密的流
*/
public DecryptStream(byte key, InputStream in) {
this.key = key;
this.in = in;
}
@Override
public int read() throws IOException {
return in.read() ^ key;
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
byte[] temp = new byte[b.length];
int c = in.read(temp, off, len);
for (int i = 0; i b.length; i++) {
b[i] = (byte) (temp[i] ^ key);
}
return c;
}
}
// Client.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Client {
public static void main(String[] args) throws Exception {
byte key = 25;
encryptFile("要加密的文件.dat", "加密过的文件.dat", key);
decryptFile("加密过的文件.dat", "解密出来的文件.dat", key);
}
/**
*
* 方法描述 加密文件
*
* @param src 要加密的文件的路径
* @param des 加密过后的文件的存放路径
* @param key 密钥
* @throws Exception
*
* @变更记录 2009-5-22 下午12:42:25 何智刚 创建
*
*/
public static void encryptFile(String src, String des, byte key)
throws Exception {
InputStream in = new FileInputStream(src);
OutputStream out = new EncryptStream(key, new FileOutputStream(des));
byte[] buf = new byte[8192];
int c;
while ((c = in.read(buf)) 0) {
out.write(buf, 0, c);
}
in.close();
out.flush();
out.close();
}
/**
*
* 方法描述 解密文件
*
* @param src 要解密的文件的路径
* @param des 解密过后的文件的存放路径
* @param key 密钥
* @throws Exception
*
* @变更记录 2009-5-22 下午12:43:04 何智刚 创建
*
*/
public static void decryptFile(String src, String des, byte key)
throws Exception {
InputStream in = new DecryptStream(key, new FileInputStream(src));
OutputStream out = new FileOutputStream(des);
byte[] buf = new byte[8192];
int c;
while ((c = in.read(buf)) 0) {
out.write(buf, 0, c);
}
in.close();
out.flush();
out.close();
}
}
-----------------------------------------------
我在例子里没有用BufferedStream,而是自己创建了个byte[]做缓冲区,因为这样性能更好。用BufferedStream的话代码会更简单。
可以使用 Runtime 直接调用 winRar 的命令行命令来解压缩
注意:
1、winRar命令使用,在dos下输入 unrar 就可以看到全部的命令说明。该命令在winRar的安装目录下
2、winRar命令行命令的路径问题,也就是path。要么加入系统变量path中,要么在winRar的安装目录下执行程序
以下是程序代码,解压 test.rar 到当前目录下,密码123
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestRunTime {
public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
try {
Process p = run.exec("unrar e test.rar -p123");//执行解压缩命令
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
String lineStr;
while ((lineStr = inBr.readLine()) != null)
System.out.println(lineStr);
// 检查命令是否执行失败。
if (p.waitFor() != 0) {
if (p.exitValue() == 1)// p.exitValue()==0表示正常结束,1:非正常结束
System.err.println("命令执行失败!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.写一个操作数据库的通用DAO(假设为Dao.java),提供
·加载数据库驱动和获取数据库连接的方法:void getConnection();
·执行查询的方法:ResultSet executeQuery(String sql);
·执行更新的方法:Integer executeUpdate(String sql);
·关闭资源的方法:void releaseResource(Connection con);
2.在你的界面中把用户名和密码取出来
·username = yourTextField.getText();
·password = yourPasswordField.getText();
3.匹配
·验证username、password是否是有效输入值(例如:不能包含特殊字符,不能有注入嫌疑等)
·String sql = "select * from yourTable where username='"+username+"' and password='"+password+"'" ;
·Dao.executeQuery(sql):如果有结果说明合法,否则不合法。
不懂Connect 我