一、背景(一些屁话)
事情是这样的,今天突然间想起来IWrite没有写。于是打开iwrite,禁用脚本,准备一如既往地复制粘贴。
结果。。。一点用也没,禁用脚本的话,别说粘贴了,自己写都不行。
明明上学期还能通过禁用脚本来粘贴的,这学期居然不行了,看来是系统升级了。
但这能难得到我?
破网站还要i write。那我偏不,我要you write。
怀着这样的想法,跨世纪的工程——YouWrite诞生了。利用Java的IO流和Robot类型,解决了iwrite不能复制粘贴的世纪难题。
(上图是西安邮电大学因iwrite不能复制粘贴而面露难色的二人)
二、核心代码
直接上代码:
package cn.unipus.youwrite;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.*;
public class YouWrite {
private static BufferedReader br;
private static Robot r;
private static void write(char ch) {
/* 如果是小写字母 */
if ('a' <= ch && ch <= 'z') {
int temp = ch & 0xDF;
r.keyPress(temp);
r.keyRelease(temp);
return;
}
/* 如果是大写字母 */
if ('A' <= ch && ch <= 'Z') {
r.keyPress(KeyEvent.VK_SHIFT);
r.keyPress(ch);
r.keyRelease(ch);
r.keyRelease(KeyEvent.VK_SHIFT);
return;
}
/* 如果是数字 */
if ('0' <= ch && ch <= '9') {
r.keyPress(ch);
r.keyRelease(ch);
return;
}
/* 其他字符 */
try {
r.keyPress(ch);
r.keyRelease(ch);
} catch (IllegalArgumentException e) {
System.out.print(ch);
System.out.println("字符非法,已跳过。");
}
}
private static void init() {
try {
r = new Robot();
} catch (AWTException e) {
System.err.println("机器人创建失败");
e.printStackTrace();
}
try {
br = new BufferedReader(
new InputStreamReader(
new FileInputStream("text.txt")));
} catch (FileNotFoundException e) {
System.err.println("IO异常");
e.printStackTrace();
}
}
public static void write() {
if (br == null) init();
/* 缓冲区大小设置为1MB */
char[] buffer = new char[512];
int l = 0;
try {
/* 遍历输出流 */
while ((l = br.read(buffer)) > 0) {
for (int i = 0; i < l; i++) {
write(buffer[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
YouWrite类是一个不可实例化的类,其中只有一个write()静态方法是对外透明的,调用该方法后,程序会读取"text.txt"文件,并自动控制键盘输入文件中的内容。
(写完代码后累得昏撅的九死九歌)
三、使用方法
我们再写一个主类:(或者你也可以把主函数放到YouWrite里边,随缘咯)
package cn.unipus.youwrite;
public class Main {
public static void main(String[] args) {
YouWrite.write();
}
}
创建一个"text.txt"的文件:
从某没良心的搜索引擎上copy一篇英文作文并粘贴到"text.txt"中:
回到Main中,直接运行。并把光标放到iwrite的输入框,像这样:(切记一定要切成英文输入)
过会儿后:
我们看看控制台:
毕竟我这个代码的原理是分析字符对应的键盘按键并控制键盘键入,汉字的话还得分析汉字的拼音之类的,工程量太大了,直接跳过完事。
最后编辑于1919年8月10日 11:45:14