import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
class copy
{
JFrame f;
JPanel p;
JPanel p1;
JPanel p2;
JPanel p3;JLabel jl=new JLabel("    ");
JLabel jl1=new JLabel("");
JLabel jl2=new JLabel("");
JLabel jl3=new JLabel("");
JLabel jl4=new JLabel(""); JFileChooser fc1=new JFileChooser("请选择输出路径");
JTextField t=new JTextField("                                       ");
JTextField t1=new JTextField("                                       ");
JButton b1=new JButton("确定");
JButton b2=new JButton("取消");
JButton b3=new JButton("退出");
JButton b4=new JButton("选择");
JButton b5=new JButton("保存");





copy()
{

f=new JFrame();
f.setTitle("复制程序");
BorderLayout bl=new BorderLayout();
f.getContentPane().setLayout(bl);
f.setSize(400,300);
f.setLocation(300,300);
p=new JPanel(new GridLayout(3,1,10,10));

f.getContentPane().add("Center",p);
p1=new JPanel();p1.setLayout(new FlowLayout());
p2=new JPanel();p2.setLayout(new FlowLayout());
p3=new JPanel();p3.setLayout(new FlowLayout());
p1.add(t);
p1.add(b4);
p2.add(t1);
p2.add(b5);  
f.getContentPane().add("North",jl);
f.getContentPane().add("Center",p);
p.add(p1);
p.add(p2);
p.add(p3);
p3.add(b1);
p3.add(b2);
p3.add(b3);
f.setVisible(true);
b4.addActionListener(new buttonA(1));
b5.addActionListener(new buttonA(2));
b1.addActionListener(new buttonA(3));
b2.addActionListener(new buttonA(4));
b3.addActionListener(new buttonA(5));


}



public static void main(String args[])
{
copy my=new copy();
}
class buttonA implements ActionListener
{
JFileChooser fc=new JFileChooser("c:/");
int sel;
File sf,sf1;
String fname,fname1;
buttonA(int select)
{
this.sel=select;
}
public void actionPerformed(ActionEvent e)
{
if(sel==1)
{
fc.showOpenDialog(null);
sf=fc.getSelectedFile();
fname=sf.getAbsolutePath();
t.setText(fname);
}
else if(sel==2)
{
fc1.showOpenDialog(null);
sf1=fc1.getSelectedFile();
fname1=sf1.getAbsolutePath();
t1.setText(fname1);
}
else if(sel==3)
{
try
{
File f=new File(fname);
FileInputStream fi=new FileInputStream(f);
FileOutputStream fo=new FileOutputStream(fname1);
byte b[]=new byte[1024];
int i=fi.read(b);
while (fi.read(b)!=-1)
{
fo.write(b);
fo.flush();
i=fi.read(b);
}
System.out.println ("复制完毕");
fi.close();
fo.close();

}catch(Exception e1){}

}
else if(sel==5)
{
System.exit(0);
}
else if(sel==4)
{

}

}

}








}    这是我做的一个复制程序代码  不知道哪里错了 不能实现复制功能

解决方案 »

  1.   

    int i=fi.read(b);
    while (fi.read(b)!=-1)
    {
    fo.write(b);
    fo.flush();
    i=fi.read(b);
    }这里fi读了很多次,但写了没几次
    while(fi.read(b)!=-1){fo.write(b)};
    循环结束再flush也不迟
      

  2.   

    没用 我试过了  回lydvqq(碧水情缘♀黑哥) :
        我的程序没有报错, 只是运行问题!
      

  3.   

    估计应该是你这里的问题..File f=new File(fname);
    FileInputStream fi=new FileInputStream(f);
    FileOutputStream fo=new FileOutputStream(fname1);这里可能会涉及到一个文件路径中\与\\的文件..可能是你这里的文件路径不对..
    你可以试着改成这样试试就能知道是否这里出问题了FileInputStream fi=new FileInputStream("c:\\a.txt");
    FileOutputStream fo=new FileOutputStream("c:\\b.txt");
      

  4.   

    哦。仔细一才看发现。你把
    String fname,fname1;这句放在了内部类里。。这样是不行的。。你需要把他放到你外部类里。把内部类里那句去掉。。
    在外部类里定义
    class copy
    {
      public String fname,fname1;
    .......
      

  5.   

    J2SE  扩展里也有这帖子  一旦问题解决 请过去领分
      

  6.   

    还有。你根本没按我第一次的方法改了试下啊。。你说你改了发现不是那里的问题。我这才发现。你把这放到了内部类里。。放在内部类里的话。按道理你在调用
    File f=new File(fname);
    FileInputStream fi=new FileInputStream(f);
    FileOutputStream fo=new FileOutputStream(fname1);这几句时fname和fname是没有值的,所以不能复制成功...