怎样用JAVA来实现文件的传送? 如题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把文件转化为Stream(要看具体是什么文件了),用Socket通信就行了啊! 呵呵我用socket实现了点对点的文本传送相信原理差不多 由四个类组成,可用来作ftp服务器用的一个实例,算是比较全面的一个文件上传的例子吧import java.io.*;import java.net.*;public class FTPServer{ ThreadGroup group; FTPServer(){ group=new ThreadGroup("FTPThreads"); } protected void finalize(){ group.stop(); } public static void main(String[] args){ ServerSocket server; Socket socket; FTPServer ftp=new FTPServer(); try{ server=new ServerSocket(1999); System.out.println("Listening on port: 1999"); }catch(IOException e){ System.out.println("e"); return; } while(true){ try{ socket=server.accept(); System.out.println("New user form"+socket.getInetAddress().toString()); (new FTPServerThread(ftp.group,ftp,socket)).start(); }catch(IOException e){ System.out.println(e); return; } } }}__________________________________________import java.io.*;import java.net.*;class FTPServerThread extends Thread{ FTPServer ftp; Socket socket; DataInputStream in; PrintStream out; String line; FileList fl; public FTPServerThread(ThreadGroup group,FTPServer ftp,Socket socket){ super(group,"FTPThread"); this.ftp=ftp; this.socket=socket; fl=new FileList("d:/ftp"); } public void run(){ try{ in=new DataInputStream(socket.getInputStream()); out=new PrintStream(socket.getOutputStream()); while(true){ line=in.readLine(); if(line.trim().equals("ls")){ fl.Display(out); }else if(line.trim().equals("quit")){ break; }else if(line.substring(0,2).equals("cd")){ fl.ChDir(line.substring(2).trim(),out); }else if(line.substring(0,3).equals("get")){ fl.put(line.substring(3).trim(),out); }else{ out.println("Invalid command"); } } in.close(); out.close(); System.out.println("User "+socket.getInetAddress().toString()+" leaved"); socket.close(); } catch(IOException e){ System.out.println(e); } }}_________________________________________import java.io.*;import java.net.*;class FileList{ File f; FileList(String dir){ f=new File(dir); } public void ChDir(String dir,PrintStream out){ if(dir.equals("..")){ if(f.getParent()!=null){ f=new File(f.getParent()); out.println("Current directory: "+f.getPath()); } else{ out.println("Already root directory!"); } } else{ File g=new File(f,dir); if(g.exists()&&g.isDirectory()){ f=g; out.println("Current directory: "+f.getPath()); } else{ out.println("No such directory!"); } } } public void Display(PrintStream out){ String[] st=f.list(); File g; out.println(st.length); for(int i=0;i<st.length;i++){ g=new File(f,st[i]); if(g.isFile()){ out.println(format(st[i],20,false)+format(String.valueOf(g.length()),10,true)); } else{ out.println(format(st[i],20,false)+format("<DIR>",10,true)); } } } private String format(String s,int len,boolean pre){ StringBuffer buf=new StringBuffer(s); while(buf.length()<len){ if(pre){ buf.insert(0," "); }else{ buf.append(" "); } } return(new String(buf)); } public void put(String fn,PrintStream out){ File g=new File(f,fn); if(g.exists()&&g.isFile()){ try{ FileInputStream fin=new FileInputStream(g); int len=(int)g.length(); byte[] content=new byte[len]; out.println(len); fin.read(content,0,len); fin.close(); out.write(content,0,len); } catch(IOException e){} } else{ out.print(-1); out.println("No such file!"); } }}_________________________________________import java.io.*;import java.net.*;public class FTPClient{ public static void main(String[] args){ Socket socket; DataInputStream in; PrintStream out; String line; DataInputStream din=new DataInputStream(System.in); //if(args.length!=1){ // System.out.println("Usage: java FTPClient <hostname>"); // return; //} try{ socket=new Socket("192.168.28.82",1999); in=new DataInputStream(socket.getInputStream()); out=new PrintStream(socket.getOutputStream()); while(true){ System.out.println(); System.out.print(":"); line=din.readLine(); if(line.equals(" "))continue; out.println(line); if(line.trim().equals("quit"))break; else if(line.trim().equals("ls")){ int num=Integer.parseInt(in.readLine()); for(int i=0;i<num;i++){ line=in.readLine(); System.out.println(line); } System.out.println("Total: "+num+" Items"); }else if(line.trim().substring(0,3).equals("get")){ int len=Integer.parseInt(in.readLine()); if(len<0){ line=in.readLine(); System.out.println(line); } else{ FileOutputStream fout=new FileOutputStream("d:/down/"+line.substring(3).trim()); byte[] content=new byte[len]; in.read(content,0,len); fout.write(content,0,len); fout.close(); System.out.println(len+" bytes received"); } } else{ line=in.readLine(); System.out.println(line); } } in.close(); out.close(); socket.close(); } catch(IOException e){ System.out.println(e); } }} 点对点的文本传送是必修课,原理和socket上写东西一样.我用的是 private PrintStream m_Out=null; private BufferedInputStream m_In=null; 多谢 Hodex(小何才露尖尖角),东西我还没看完,不过谢一下先! to Hodex(小何才露尖尖角) ,终于看了一遍你的代码,先谢谢你!不过有个问题想问一下,为什么get到的文件在目的文件夹找不到? 不是FileOutputStream fout=new FileOutputStream("d:/down/"+line.substring(3).trim());吗,你到d:/down下找不到? 帮你放到当前目录中去了?我的怎么都在d:/down不过关键是你了解了呵呵 关于继承 JTextFeild如何获得焦点 JTAble表头问题 救命啊!无缘无故出现了jdk1.3版本~~ 怎么获取Jtextfield里用户输入的信息并修改数据库中相应值? 急求聊天工具的代码? static类/变量会不会被GC回收? jpopup menu 能够横过来吗? 画线问题,请帮忙,谢谢. 怎样在JAVA程序里面调用一个外部命令?? 简单问题:怎么取小数点后两位? [高手请入,已折磨我整整24小时]几个让我极为困惑的问题(涉及setOpaque(),JScrollPane,GridBagLayout(),JTextPane)
我用socket实现了点对点的文本传送
相信原理差不多
import java.io.*;
import java.net.*;public class FTPServer{
ThreadGroup group;
FTPServer(){
group=new ThreadGroup("FTPThreads");
}
protected void finalize(){
group.stop();
}
public static void main(String[] args){
ServerSocket server;
Socket socket;
FTPServer ftp=new FTPServer();
try{
server=new ServerSocket(1999);
System.out.println("Listening on port: 1999");
}catch(IOException e){
System.out.println("e");
return;
}
while(true){
try{
socket=server.accept();
System.out.println("New user form"+socket.getInetAddress().toString());
(new FTPServerThread(ftp.group,ftp,socket)).start();
}catch(IOException e){
System.out.println(e);
return;
}
}
}
}
__________________________________________
import java.io.*;
import java.net.*;class FTPServerThread extends Thread{
FTPServer ftp;
Socket socket;
DataInputStream in;
PrintStream out;
String line;
FileList fl;
public FTPServerThread(ThreadGroup group,FTPServer ftp,Socket socket){
super(group,"FTPThread");
this.ftp=ftp;
this.socket=socket;
fl=new FileList("d:/ftp");
}
public void run(){
try{
in=new DataInputStream(socket.getInputStream());
out=new PrintStream(socket.getOutputStream());
while(true){
line=in.readLine();
if(line.trim().equals("ls")){
fl.Display(out);
}else if(line.trim().equals("quit")){
break;
}else if(line.substring(0,2).equals("cd")){
fl.ChDir(line.substring(2).trim(),out);
}else if(line.substring(0,3).equals("get")){
fl.put(line.substring(3).trim(),out);
}else{
out.println("Invalid command");
}
}
in.close();
out.close();
System.out.println("User "+socket.getInetAddress().toString()+" leaved");
socket.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
_________________________________________
import java.io.*;
import java.net.*;class FileList{
File f;
FileList(String dir){
f=new File(dir);
}
public void ChDir(String dir,PrintStream out){
if(dir.equals("..")){
if(f.getParent()!=null){
f=new File(f.getParent());
out.println("Current directory: "+f.getPath());
}
else{
out.println("Already root directory!");
}
}
else{
File g=new File(f,dir);
if(g.exists()&&g.isDirectory()){
f=g;
out.println("Current directory: "+f.getPath());
}
else{
out.println("No such directory!");
}
}
}
public void Display(PrintStream out){
String[] st=f.list();
File g;
out.println(st.length);
for(int i=0;i<st.length;i++){
g=new File(f,st[i]);
if(g.isFile()){
out.println(format(st[i],20,false)+format(String.valueOf(g.length()),10,true));
}
else{
out.println(format(st[i],20,false)+format("<DIR>",10,true));
}
}
}
private String format(String s,int len,boolean pre){
StringBuffer buf=new StringBuffer(s);
while(buf.length()<len){
if(pre){
buf.insert(0," ");
}else{
buf.append(" ");
}
}
return(new String(buf));
}
public void put(String fn,PrintStream out){
File g=new File(f,fn);
if(g.exists()&&g.isFile()){
try{
FileInputStream fin=new FileInputStream(g);
int len=(int)g.length();
byte[] content=new byte[len];
out.println(len);
fin.read(content,0,len);
fin.close();
out.write(content,0,len);
}
catch(IOException e){}
}
else{
out.print(-1);
out.println("No such file!");
}
}
}
_________________________________________
import java.io.*;
import java.net.*;public class FTPClient{
public static void main(String[] args){
Socket socket;
DataInputStream in;
PrintStream out;
String line;
DataInputStream din=new DataInputStream(System.in);
//if(args.length!=1){
// System.out.println("Usage: java FTPClient <hostname>");
// return;
//}
try{
socket=new Socket("192.168.28.82",1999);
in=new DataInputStream(socket.getInputStream());
out=new PrintStream(socket.getOutputStream());
while(true){
System.out.println();
System.out.print(":");
line=din.readLine();
if(line.equals(" "))continue;
out.println(line);
if(line.trim().equals("quit"))break;
else if(line.trim().equals("ls")){
int num=Integer.parseInt(in.readLine());
for(int i=0;i<num;i++){
line=in.readLine();
System.out.println(line);
}
System.out.println("Total: "+num+" Items");
}else if(line.trim().substring(0,3).equals("get")){
int len=Integer.parseInt(in.readLine());
if(len<0){
line=in.readLine();
System.out.println(line);
}
else{
FileOutputStream fout=new FileOutputStream("d:/down/"+line.substring(3).trim());
byte[] content=new byte[len];
in.read(content,0,len);
fout.write(content,0,len);
fout.close();
System.out.println(len+" bytes received");
}
}
else{
line=in.readLine();
System.out.println(line);
}
}
in.close();
out.close();
socket.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
我用的是
private PrintStream m_Out=null;
private BufferedInputStream m_In=null;
你到d:/down下找不到?
我的怎么都在d:/down
不过关键是你了解了
呵呵