愚人码头

知耻而后勇,知不足而进
随笔 - 33, 文章 - 1, 评论 - 26, 引用 - 0
数据加载中……

java实现文件传输

  1import java.awt.*
  2import java.awt.event.*
  3import javax.swing.*
  4import javax.swing.event.*
  5import java.io.*
  6import java.net.*
  7import javax.swing.filechooser.FileFilter; 
  8
  9public class Chooser extends JLabel 
 10
 11private JButton openButton,saveButton; 
 12JFileChooser fc; 
 13String fileName; 
 14int result; 
 15Chooser() 
 16
 17setLayout(new GridLayout()); 
 18JButton openButton=new JButton("Open"); 
 19openButton.addActionListener(new openFile()); 
 20JButton saveButton=new JButton("Save"); 
 21saveButton.addActionListener(new saveFile()); 
 22add(openButton); 
 23add(saveButton); 
 24}
 
 25
 26class openFile implements ActionListener 
 27
 28public void actionPerformed(ActionEvent e) 
 29
 30fc = new JFileChooser(); 
 31result = fc.showOpenDialog(Chooser.this); 
 32File file = fc.getSelectedFile(); 
 33if(file!=null && result==JFileChooser.APPROVE_OPTION) 
 34
 35fileName = file.getAbsolutePath(); 
 36System.out.println("You chose to open this file: " +fileName); 
 37try 
 38
 39File file1=new File(fileName); 
 40FileInputStream fos=new FileInputStream(file1); 
 41//创建网络服务器接受客户请求 
 42ServerSocket ss=new ServerSocket(3108); 
 43Socket client=ss.accept(); 
 44//创建网络输出流并提供数据包装器 
 45OutputStream netOut=client.getOutputStream(); 
 46OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut)); 
 47//创建文件读取缓冲区 
 48byte[] buf=new byte[2048]; 
 49int num=fos.read(buf); 
 50while(num!=(-1)) 
 51//是否读完文件 
 52doc.write(buf,0,num);//把文件数据写出网络缓冲区 
 53doc.flush();//刷新缓冲区把数据写往客户端 
 54num=fos.read(buf);//继续从文件中读取数据 
 55}
 
 56fos.close(); 
 57doc.close(); 
 58}
 
 59catch(Exception ex) 
 60
 61System.out.println(ex); 
 62}
 
 63}
 
 64if(result == JFileChooser.CANCEL_OPTION) 
 65
 66}
 
 67
 68}
 
 69}
 
 70class saveFile implements ActionListener 
 71
 72public void actionPerformed(ActionEvent e) 
 73
 74fc = new JFileChooser(); 
 75result = fc.showSaveDialog(Chooser.this); 
 76File file1 = fc.getSelectedFile(); 
 77fileName = file1.getAbsolutePath(); 
 78System.out.println("fileName:"+fileName); 
 79if (result == JFileChooser.APPROVE_OPTION) 
 80
 81try 
 82
 83File file2=new File(fileName); 
 84file2.createNewFile(); 
 85RandomAccessFile raf=new RandomAccessFile(file2,"rw"); 
 86// 通过Socket连接文件服务器 
 87Socket server=new Socket(InetAddress.getLocalHost(),3108); 
 88//创建网络接受流接受服务器文件数据 
 89InputStream netIn=server.getInputStream(); 
 90InputStream in=new DataInputStream(new BufferedInputStream(netIn)); 
 91//创建缓冲区缓冲网络数据 
 92byte[] buf=new byte[2048]; 
 93int num=in.read(buf); 
 94System.out.println("in.read(buf)´length="+num); 
 95while(num!=(-1)) 
 96{//是否读完所有数据 
 97raf.write(buf,0,num);//将数据写往文件 
 98raf.skipBytes(num);//顺序写文件字节 
 99num=in.read(buf);//继续从网络中读取文件 
100}
 
101in.close(); 
102raf.close(); 
103}
 
104catch(Exception ex) 
105
106System.out.println(ex); 
107}
 
108
109}
 
110if(result == JFileChooser.CANCEL_OPTION) 
111
112}
 
113}
 
114}
 
115public static void main(String args[]) 
116
117JFrame f=new JFrame(); 
118f.getContentPane().add(new Chooser()); 
119f.setSize(250110); 
120f.setResizable(false); 
121f.setDefaultCloseOperation(3); 
122f.setVisible(true); 
123}
 
124}
 

posted on 2005-12-20 11:22 船夫 阅读(3042) 评论(5)  编辑  收藏 所属分类: java技术

评论

# re: java实现文件传输  回复  更多评论   

谢谢!
2006-10-28 19:46 | hello

# re: java实现文件传输  回复  更多评论   

这个功能不用Jbuider能实现吗 ?
能实现的话具体怎么实现 ?
2007-05-21 10:47 |

# re: java实现文件传输  回复  更多评论   

这个跟你使用什么开发工具无关的,都可以实现的
2007-05-21 11:59 | 船夫

# re: java实现文件传输  回复  更多评论   

很高兴见到你回话,
我是个初学者,现在在编一个基于SOCKET的聊天程序,主要的功能有3:一是基本的短信息收发,2是文件传输功能,3是语音视频聊天功能,现在我想把传输功能部分做成象QQ那样的 传文件的时候弹出一个浏览对话框选择文件进行传输,要Server与Client能进行互传 想请你帮忙下,
2007-05-21 18:06 |

# re: java实现文件传输  回复  更多评论   

是不是要考虑效率问题? 如果是校园网和外网传输呢????
是不是要用到线程?
楼主请指教?
2009-05-20 21:29 | Blood

只有注册用户登录后才能发表评论。


网站导航: