前天和昨天斌哥讲了java的IO流和汉字的输入输出。并且要我们完成文件的复制粘贴,同样要用到界面,重点的复制粘贴思想是把一个文件看成是一堆二进制数,一个个字节的操作。

在java中是用FileInputStream和FileOutputStream类的应用。然后用FileInputStream的read()读入,用FileOutputStream的write()写出。就可以完成复制粘贴操作了。

但是这样速度很慢,所以要用一个字节数组作为缓冲区,一个一个字节数组读入和写出,效率会快很多。

其中也提到了一个个缓冲区操作会读多字节,让我们处理不足,用一个int型的数字检测是否读完就可以了。

还有汉字的流输出处理。下面是我的复制粘贴程序。

public class Coby extends JFrame{
	
	JTextField text1;
	JTextField text2;
	JButton jb;
	public static void main(String[] args) throws IOException {
		Coby test = new Coby();
		test.coby("F:\\iotest\\hejindantou.exe", "F:\\iotest\\zzz.exe");
		test.initFrame();
		test.xianshi("F:\\HLS\\My复制粘贴\\src\\复制粘贴\\Coby.java");
	}
	public void coby(String inputpath,String outputpath) throws IOException{
		byte[] dates = new byte[1024];
		FileInputStream fis = new FileInputStream(inputpath);
		FileOutputStream fos = new FileOutputStream(outputpath);
		long time1 = System.currentTimeMillis();
		int i = fis.read(dates);
		while(i != -1){
			fos.write(dates,0,i);
			i = fis.read(dates);
		}
		long time2 = System.currentTimeMillis();
		long time3 = time2 - time1 ;
		System.out.println(time3);
		fos.close();
		fis.close();
	}
	public void initFrame(){
		this.setTitle("My复制粘贴");
		this.setSize(250, 150);
		jb = new JButton("点我复制");
		JLabel label1 = new JLabel("复制");
		JLabel label2 = new JLabel("粘贴");
		text1 = new JTextField(15);
		text2 = new JTextField(15);
		this.setLayout(new FlowLayout());
		this.add(label1);
		this.add(text1);
		this.add(label2);
		this.add(text2);
		this.add(jb);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		
		jb.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				try {
					coby(text1.getText(),text2.getText());
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});
	}
就这么多了啦,上星期的知识总结到这里。等下要去上课了。