📄 acceptfilethread.java
字号:
package client.thread;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.text.BadLocationException;
import javax.swing.text.StyledDocument;
import utils.StaticUtils;
import client.chat.chatpane.ChatFrame;
/**
* 接收文件线程
* @author 洪景泉
*
*/
public class AcceptFileThread extends Thread {
private ChatFrame chatFrame=null;
private ServerSocket ss=null;
private InputStream is=null;
private OutputStream os=null;
private long fileSize=0;
private File savePath=null;
private ReadThread thread=null;
private int port=0;
public AcceptFileThread(ChatFrame chatFrame, String fileSize) {
this.chatFrame=chatFrame;
this.fileSize=Long.parseLong(fileSize);
}
public AcceptFileThread(ChatFrame chatFrame, String fileSize, ReadThread thread,int port) {
this.chatFrame=chatFrame;
this.fileSize=Long.parseLong(fileSize);
this.thread=thread;
this.port=port;
}
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(port);
Socket s=ss.accept();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("我的文档"));
fileChooser.setFileFilter(new FileFilter() {
public boolean accept(File f) {
if (f.isDirectory()|| f.isFile()) {
return true;
} else {
return false;
}
}
public String getDescription() {
return "所有文件(*.*)";
}
});
if(fileChooser.showSaveDialog(chatFrame) == JFileChooser.APPROVE_OPTION) {
savePath = fileChooser.getSelectedFile();
}
// ProgressMonitorInputStream pmis=new ProgressMonitorInputStream(chatFrame,"接收进度",s.getInputStream());
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
//DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
byte[] buf = new byte[1024];
int passedlen = 0;
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(
new BufferedOutputStream(new FileOutputStream(savePath))));
System.out.println("开始接收文件!" + "");
// JTextPane tpShow = chatFrame.getLPane().getShowText();
// tpShow.setEditable(true);
JLabel lab=new JLabel();
// tpShow.insertComponent(lab);
JTextPane showText = chatFrame.getLPane().getShowText();
StyledDocument showDoc = showText.getStyledDocument();
showText.setEditable(true);
SimpleDateFormat sdf = new SimpleDateFormat ("HH:mm:ss");
sdf = new SimpleDateFormat ("HH:mm:ss");
showText.setCaretPosition(showDoc.getLength());
showText.insertComponent(lab);
showDoc.insertString(showDoc.getLength(),"\n",null);
while (true) {
int read = 0;
if (dis != null) {
read = dis.read(buf);
}
passedlen += read;
if (read == -1) {
break;
}
//下面进度条本为图形界面的prograssBar做的,这里如果是打文件,
//可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (passedlen / fileSize* 100) + "%");
System.out.println("fileSize="+fileSize);
System.out.println("passedlen="+passedlen);
lab.setText("文件接收了" + (long)(passedlen * 100/ fileSize) + "%");
fileOut.write(buf, 0, read);
}
sdf = new SimpleDateFormat ("HH:mm:ss");
String currentuser=(String)StaticUtils.currentUser.get("userName");
try {
showDoc.insertString(showDoc.getLength(),"\n"+currentuser+" "+sdf.format(new Date())+"\n",null);
showDoc.insertString(showDoc.getLength(), "文件传输完成\n", null);
thread.getBtn1().setEnabled(false);
thread.getBtn2().setEnabled(false);
} catch (BadLocationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
fileOut.close();
ss.close();
s.close();
} catch (IOException e) {
//System.out.println("服务器关闭");
e.printStackTrace();
} catch (BadLocationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -