⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acceptfilethread.java

📁 聊天工具
💻 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 + -