【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,XFile.java,希望对大家有所帮助!
import java.io.*;
import java.net.*;
import net.jxta.pipe.*;
import net.jxta.impl.endpoint.*;
public class XFile
implements PipeMsgListener
{
P2PSocket pps = new P2PSocket();
BaseMessage bm = new BaseMessage();
public XFile()
{
pps.setInputPipeName("001");
pps.setInListener(this);
pps.bind();
pps.setOutListener(pps);
pps.connect("002");
}
public void pipeMsgEvent(PipeMsgEvent event)
{
String temp = null;
MessageImpl mi = (MessageImpl)event.getMessage();
temp = mi.getString(BaseMessage.FILE_MESSAGE_TYPE);
if(temp.equals(BaseMessage.FILE_LIST_REQEST))
{
toFileListRequest(mi);
return;
}
if(temp.equals(BaseMessage.FILE_LIST))
{
toFileList(mi);
return;
}
if(temp.equals(BaseMessage.FILE_DOWNLOAD_REQEST))
{
toFileDownloadRequest(mi);
return;
}
if(temp.equals(BaseMessage.FILE_DOWNLOAD))
{
toFileDownload(mi);
return;
}
if(temp.equals(BaseMessage.FILE_UPLOAD))
{
toFileUpload(mi);
return;
}
}
public void doFileListRequest(MessageImpl mi)
{
System.out.println("捕获一个本地共享文件列表的请求!");
pps.send(bm.newFileMessage(this.listFile(),pps.getOutputPipeName(),pps.getInputPipeName(),bm.FILE_LIST,"Temp");
}
public void doFileList(MessageImpl mi)
{
System.out.println("捕获一个文件
列表的请求!");
MessageElementImpl mei = (MessageElementImpl)mi.getElement(BaseMessage.FILE_LIST);
this.displayFile(mei.getStream());
}
public void doFileDownloadRequest(MessageImpl mi)
{
System.out.println("捕获一个下载本地共享文件列表的请求!");
String file_name = mi.getString(bm.FILE_NAME);
pps.send(bm.newFileMessage(file2Stream(file_name),pps.getOutputPipeName(),pps.getInputPipeName(),bm.FILE_DOWNLOAD,file_name);
}
public void doFileDownload(MessageImpl mi)
{
System.out.println("捕获一个需要下载的共享文件!");
MessageElementImpl mei = (MessageElementImpl)mi.getElement(BaseMessage.FILE_DOWNLOAD);
String file_name = mi.getString(bm.FILE_NAME);
save2File(mei.getStream(),file_name);
}
public void doFileUpload(MessageImpl mi)
{
System.out.println("捕获一个上传的共享文件!");
MessageElementImpl mei = (MessageElementImpl)mi.getElement(BaseMessage.FILE_UPLOAD);
String file_name = mi.getString(bm.FILE_NAME);
save2File(mei.getStream(),file_name);
}
public void save2File(InputStream is,String fname)
{
int length;
byte buf[] = new byte[1024];
try
{
FileOutputStream fos = new FileOutputStream("share/"+fname);
BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream(is);
while((length=bis.read(buf,0,1024))!=-1)
{
bos.write(buf,0,length);
bos.flush();
}
bis.close();
bos.close();
fos.close();
}catch(IOException ioe)
{
System.out.println("写入文件错误:"+ioe);
}
}
public InputStream file2Stream(String file)
{
try
{
FileInputStream fis = new FileInputStream("share/"+file);
return fis;
}catch(IOException ioe)
{
System.out.println("无法读取本地文件");
System.exit(-1);
}
return null;
}
public InputStream listFile()
{
try
{
String userpath = System.getProperty("user.dir");
URL url = new RUL("file:///"+userpath+"/share");
return url.openStream();
}catch(MalformedURLException me)
{
System.out.println("获取文件共享名出错");
System.exit(-1);
}catch(IOException ioe)
{
System.out.println("获取文件共享名出I/O错");
System.exit(-1);
}
return null;
}
public void displayFile(InputStream is)
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = br.readLine();
while(s!-null)
{
toScreen(s);
s = br.readLine();
}
}catch(IOException ioe)
{
System.out.println("显示文件出I/O错");
System.exit(-1);
}
}
public void toScreen(String s)
{
System.out.println(s);
}
public static void main(String args[])
{
XFile xf = new XFile();
xf.pps.send(xf.bm.newFileMessage(null,null,null,BaseMessage.FILE_LIST_REQUEST,"Temp"));
sf.pps.send(xf.bm.newFileMessage(null,null,null,BaseMessage.FILE_DOWNLOAD_REQUEST,"Download.txt"));
}
};