package tcpfile;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import java.awt.Container;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.swing.JLabel;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPFileTransferServer extends JFrame implements ActionListener
{
/**
* @param args
*/
JFileChooser chooseFile; // 文件选择控件
JButton bTransfer ; // 文件传输按钮
JButton bReceive; // 文件接收按钮
JButton bExit; // 退出按钮
JTextField filePath; // 文件路径显示文本框
Container c = getContentPane(); // 获取当前面板
String file; // 路径+文件名
String pathOfFile; // 文件的路径
String fileName; // 文件名
JLabel display; // 显示程序进行的状态
boolean isEnd = false;
// 读写文件
DataInputStream inStream; // 数据输出流
DataOutputStream outStream; // 数据输入流
// 传接数据
DataInputStream m_input; // 数据输出流
DataOutputStream m_output; // 数据输入流
// 构造方法
public TCPFileTransferServer()
{
super("TCP文件传输服务器端");
c.setLayout(null);
filePath = new JTextField(); // 创建文本框
filePath.setBounds(70,5,500,30);
c.add(filePath); // 添加文本框
display = new JLabel("服务器端"); // 初始为等待连接
display.setBounds(0,5,65,30);
c.add(display); // 添加标签
bTransfer = new JButton("传输文件"); // 按钮
bTransfer.setBounds(90,301,120,28);
c.add(bTransfer); // 添加按钮
bReceive = new JButton("接收文件"); // 按钮
bReceive.setBounds(230,301,120,28);
bTransfer.addActionListener(this); // 添加事件监听
bReceive.addActionListener(this); // 添加事件监听
c.add(bReceive); // 添加按钮
bExit = new JButton("退出");
bExit.setBounds(5,301,70,28);
bExit.addActionListener(this);
c.add(bExit);
chooseFile = new JFileChooser(); // 文件选择框
chooseFile.setBounds(0,40,500,300);
// 为文件选择框添加事件监听器
chooseFile.addActionListener(this);
c.add(chooseFile); // 添加文件选择框
}
public void actionPerformed( ActionEvent e )
{
if( e.getSource()== chooseFile ) // 如果为文件选择
{
JFileChooser chooser = (JFileChooser)e.getSource(); // 获取当前事件资源
File fPath = chooser.getCurrentDirectory(); // 获取文件路径
pathOfFile = fPath.getPath();
File selectedFile = chooser.getSelectedFile(); // 获取选择的文件
fileName = selectedFile.getName(); // 得到文件名
file = pathOfFile + "\\" + fileName ; //
filePath.setText(file); // 将文件路径写到文本框
}
else if(e.getSource()== bTransfer) // 传输文件
{
mb_transferFile();
}
else if(e.getSource()== bReceive ) // 接收文件
{
mb_receiverFile();
} // if else 结束
else if( e.getSource()==bExit)
{
isEnd =true;
}
} // 方法结束
// 文件传输方法
public void mb_transferFile()
{
try
{
display.setText("传输中……");
m_output.writeUTF(fileName);
m_output.flush();
FileInputStream fs=new FileInputStream(file); // 文件输入流 把文件file作为数据来源 输出数据
inStream = new DataInputStream( fs ); // 数据流
int i =0;
int s=-1;
// 按字节读取文件 100字节读取一次 直到文件读取结束
do
{
byte b[] = new byte [100];
s = inStream.read(b, i*100, (i+1)*100);
m_output.write(b, 0, 100); // 传输数据
m_output.flush();
}while(s!=-1);
System.out.println("传输成功!");
m_output.writeUTF("传输结束");
m_output.flush();
inStream.close(); // 关闭文件输入流
fs.close();
display.setText("传输成功!");
}
catch( Exception e ){}; // 异常捕获
} // 方法结束
// 接收文件方法
public void mb_receiverFile()
{
try
{
display.setText("接收中……");
fileName = m_input.readUTF();
file = pathOfFile + "\\" + fileName ; //
System.out.println(file);
File f = new File(file); // 创建文件
outStream = new DataOutputStream( new FileOutputStream(f)); // 数据流 将数据输入到文件中
int i =0;
int s=-1;
byte b[] = new byte [100];
// 按字节读取文件 100字节读取一次 直到文件读取结束
do
{
s = m_input.read(b); // 获取网络中的数据
System.out.println(s);
outStream.write(b);
}while(s==100);
display.setText("接收成功!");
outStream.close();
}catch(Exception e){} // 异常捕获
}
// 方法:程序启动后 进行的文件传输
public void mb_run()
{
try
{
ServerSocket server = new ServerSocket(3000);
while( true )
{
display.setText("等待连接……"); // 显示信息
Socket s = server.accept(); // 监听来自客户端的连接信息
// 获取网络输入输出流
m_output = new DataOutputStream( s.getOutputStream());
m_input = new DataInputStream( s.getInputStream());
display.setText("连接成功!"); // 显示信息
while(isEnd == false )
{
}
m_output.close();
m_input.close();
System.exit(0);
} // while 循环结束结束
}
catch( Exception e ){};
} // 方法结束
public static void main(String[] args)
{
// TODO Auto-generated method stub
TCPFileTransferServer server = new TCPFileTransferServer();
server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
server.setSize(500,380);
server.setResizable(false);
server.setVisible(true);
server.mb_run();
}
} // 类结束
java程序设计 TCP文件传输程序 JFileChooser实现文件选择 可以设置路径
4星 · 超过85%的资源 需积分: 9 39 浏览量
2009-11-28
21:49:59
上传
评论 5
收藏 10KB RAR 举报
白克
- 粉丝: 33
- 资源: 23
最新资源
- rainy-day.jpg
- IMG_20240501_171218.jpg
- Swift-内购封装swift版本
- 经典CNN网络之ResNet 图像分类网络实战项目:7种小麦叶片病害分类(迁移学习)
- Java毕设之ssm010基于ssm的新能源汽车在线租赁管理系统+vue.rar
- Java毕设之ssm009毕业生就业信息统计系统+vue.rar
- Java毕设之ssm008医院门诊挂号系统+jsp.rar
- Java毕设之ssm007亚盛汽车配件销售业绩管理统+jsp.rar
- Java毕设之ssm006基于java的少儿编程网上报名系统+vue.rar
- Java毕设之ssm005基于SSM框架的购物商城系统+jsp.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页