java传文件_JAVA实现文件夹传输

展开全部

//这是一个传输的程序.下面是两个程序,一个名为MyClient,

//是客户端.另一e69da5e887aa3231313335323631343130323136353331333238666331个名为MyServer,为服务器端.这两个程序实现的

//是将客户端的e盘名为"1"的文件夹里的所有内容传输到服务器端

//的e盘名为"2"的文件夹里.运行时,一定要先运行MyServer,否则会

//出错.这个程序我用两台电脑在局域网里运行过多次,一切正常,速度

//在600KB/s左右.如果运行MyServer后,再运行MyClient时,出现错误

//建议再运行一下.因为它们可能在建立连接时由于网络连接不好而

//未能连接成功而出错.程序是肯定没有问题的.

import java.io.*;

import java.net.*;

public class MyClient

{

Socket client;

boolean flag=true;

FileInputStream fis;//此输入流负责读取本机上要传输的文件

DataOutputStream dos;//此输出流负责向另一台电脑(服务器端)传输数据

DataInputStream dis;//此输入流负责读取另一台电脑的回应信息

public static void main(String[] args)

{

new MyClient().ClientStart();

}

public void ClientStart()

{

try

{

client=new Socket("192.168.2.101",30000);//服务器端的IP,(这个只是在局域网内的)我的是这个,你的根据实际而定

//client=new Socket("localhost",30000);

System.out.println("已连接");

dos=new DataOutputStream(client.getOutputStream());

dis=new DataInputStream(client.getInputStream());

transmit(new File("e:\\1\\"));

String s="/]00";//提示传输完毕的标记

byte b[]=s.getBytes();

dos.write(b,0,s.length());

dos.flush();

}

catch(IOException e)

{

System.out.println("Error");

}

}

public void transmit(File f)throws IOException//这是传输的核心,而且将被递归

{

byte b[];

String ts;

int ti;

for(File f1:f.listFiles())

{ //首先通过if语句判断f1是文件还是文件夹

if(f1.isDirectory()) //fi是文件夹,则向服务器端传送一条信息

{

ts="/]0f"+(f1.getPath().replace("e:\\1\\",""));//"/]0f"用于表示这条信息的内容是文件夹名称

b=ts.getBytes();

dos.write(b);

dos.flush();

dis.read();

transmit(f1);//由于f1是文件夹(即目录),所以它里面很有可能还有文件或者文件夹,所以进行递归

}

else

{

fis=new FileInputStream(f1);

ts="/]0c"+(f1.getPath().replace("e:\\1\\",""));//同上,表示这是一个文件的名称

b=ts.getBytes();

dos.write(b);

dos.flush();

dis.read();

dos.writeInt(fis.available());//传输一个整型值,指明将要传输的文件的大小

dos.flush();

dis.read();

b=new byte[10000];

while(fis.available()>0)//开始传送文件

{

ti=fis.read(b);

dos.write(b,0,ti);

dos.flush();

}

dos.flush();

fis.close();

dis.read();

}

}

}

}

import java.io.*;

import java.net.*;

public class MyServer

{

ServerSocket server=null;

Socket client=null;

boolean flag=true;

DataInputStream dis;

DataOutputStream dos;

FileOutputStream fos;

public static void main(String[] args)

{

new MyServer().ServerStart();

}

public void ServerStart()

{

try

{

server=new ServerSocket(30000);

System.out.println("端口号:"+server.getLocalPort());

client=server.accept();

System.out.println("连接完毕");

dis=new DataInputStream(client.getInputStream());

dos=new DataOutputStream(client.getOutputStream());

String answer="g";

byte ans[]=answer.getBytes();

byte b[]=new byte[1000];

int ti;

new File("e:\\2").mkdirs();

while(flag)

{

ti=dis.read(b);

dos.write(ans);

String select=new String(b,0,ti);

if(select.contains("/]0f"))

{

File f=new File("e:\\2\\"+(select.replace("/]0f","")));

System.out.println("creat directory");

f.mkdirs();

}

else if(select.contains("/]0c"))

{

fos=new FileOutputStream("e:\\2\\"+(select.replace("/]0c","")));

String cs;

boolean cflag=true;

int tip=dis.readInt();

dos.write(ans);

while(tip>0)

{

ti=dis.read(b,0,(tip>1000?1000:tip));

tip=tip-ti;

cs=new String(b,0,4);

fos.write(b,0,ti);

}

fos.flush();

fos.close();

dos.write(ans);

}

else if(select.contains("/]00"))

{

flag=false;

}

}

dis.close();

client.close();

server.close();

}

catch(IOException e)

{

System.out.println("Error");

}

}

}

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值