线程、IO总结
1、创建线程类的对象,并通过调用start方法来启动线程
Thread t = new Thread(l);
t.start();
2、创建线程监听器ThreadListener,继承Thread或者implements runnable
这里先讨论implements runnable:
在ThreadListener类下面重写run方法
如果直接继承Thread,那么可以直接创建当前类的对象,并且在该类下面写run方法
IO文件读写
IO的用途非常广,可以把以前做的程序变得非常地实用,因为程序能够记录下内容,并可以在以后调用。
关于IO的五个方法(函数)
1、根据字符读文件(读出来的文件都是int型的字符)
新建一个类的对象,括号内需要传参,参数可以是file对象,也可以是具体的文件路径。
如果要File对象,那么需要通过以下方式来把文件路径转换成File对象。
File f = new File(FileRoot);// 把路径转换成File类
InputStream in = new FileInputStream(f);
这里会报错,因为需要把以上语句写入try-catch里面。
因为是读字节,所以调用read方法,把读到的字符保存在t里面。int t = in.read();
while (t != -1)// 读到最后一个字符的时候会赋值-1,即-1是文件的末尾
{
System.out.println("取到的字节是:" + t);
t = in.read();
}
如此循环往复,直至文件所有内容都被读完。接下来就要关闭掉这个流。in.close();// 打开一个流之后必须要关闭掉这个流
Catch语句如下,括号内与平时写的稍有不同。
catch (Exception e) { // 注意这里是Exception
e.printStackTrace();
}
2、根据字符串读文件(以字符串的形式,可以获取完整的,可以被人读取并能理解的信息)
需要开一个byte数组,用in.available()可以直接获取文本的大小
byte[] a = new byte[in.available()];// 根据文件的大小,来确定数组的大小
for (int i = 0; i < in.available(); i++)// 循环in.avaliable()次
{
a[i] = (byte) in.read();// 本来是int类型的,转成byte类型
}
把读到的内容转成byte型并赋值给a数组。
也可以这样简写:
byte[] content = new byte[in.available()];// 根据输入流中的字节大小来创建一个byte数组,来储存
in.read(content);// 直接读到content数组里面
s = new String(content);// 数组转字符串
3、把字符串写入文件
流程:字符串转字节-写字节到文件中去
创建FileOutputStream类的对象
OutputStream out = new FileOutputStream(FileRoot);// 填路径名也可以
调用字符串的getBytes方法:
byte[] content = msg.getBytes();// 字符串转字节数组
for (int i = 0; i < content.length; i++) {
out.write(content[i]);// 把byte写入文件中
}
out.flush();
out.close();
4、复制文件
其实很简单,先把文件读成字符串,再把字符串写成一个新的文件就可以了。
5、加密/解密文件(使得文件内容变成乱码,通过解密可以把乱码变回到文字)
加密流程:读成字符串-转char数组-对数组做手脚(加加减减)-数组转成字符串-写入文件
解密流程:和加密过程类似,只不过在对数组做手脚的时候要反过来。
IO应用实例:
在画图板上把杰作保存下来。
注意点:
// 添加
private ArrayList<Lines> al;
private boolean b = false;
public void setAl(ArrayList<Lines> al) {
this.al = al;
b = true;//表示已经按了按钮,paint方法里面的if语句生效
}
保存所有轨迹的坐标,以用于重绘
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "save") {
df.setAl(al);// 把数组队列传到DrawFrame类里面
df.paint(g2d);// 传画笔,画笔画在BufferedImage上面
try {
ImageIO.write(bi, "PNG", new FileOutputStream("frame.png"));
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("出错了!!");
}
}
}