我在些一个局域网传输文件夹的程序,在连续传送文件时,发送端连续写入文件,接受端接收时却无法鉴别各个文件,将所有数据写入了一个文件,请各位指教。接收端代码:
private void output(BufferedReader br,BufferedInputStream bis,Socket s)
{
String readStr;
byte[] buf = new byte[1024*10];
int len;
try
{
while(true)
{
readStr=br.readLine();
System.out.println(readStr);
String isFile=readStr.substring(0,1);
file=readStr.substring(1);
if(isFile.equals("1"))
{
FileOutputStream fos = new FileOutputStream("E:\\"+file);
BufferedOutputStream bos=new BufferedOutputStream(fos,1024*10);
System.out.println("creating "+file+"......");
while((len=bis.read(buf,0,1024*10))!=-1)
{
bos.write(buf,0,len);
bos.flush();
}
fos.close();
bis.close();
System.out.println("creating "+file+" completed!");
}
else if(isFile.equals("0"))
{
File f=new File("E:\\"+file);
System.out.println("creating directory....."+f);
if(f.mkdir())
System.out.println("creating completed.....");
}
else
return;
}
}
catch(IOException e)
{
e.printStackTrace();
}
}发送端代码:
private void sender(File file,BufferedWriter bw,BufferedOutputStream bos)
{
if(file.isFile())
{
sendFile(file,bw,bos);
}
else
{
sendDirec(file,bw);
File[] fileList=file.listFiles();
for(int i=0;i<fileList.length;i++)
{
if(fileList[i].isFile())
{
sendFile(fileList[i],bw,bos);
}
else if(i<fileList.length)
{
sender(fileList[i],bw,bos);
}
else
{
return;
}
}
}
}
private void sendFile(File file,BufferedWriter bw,BufferedOutputStream bos)
{
System.out.println("filename: "+file);
String path=file.getPath();
String realName=path.substring(primaryPath.length());
BufferedInputStream bis=null;
byte[] fileBuf=new byte[1024*10];
int len;
try
{
FileInputStream fis = new FileInputStream(file);
bis=new BufferedInputStream(fis,1024*10);
bw.write("1"+realName);
bw.newLine();
bw.flush();
while((len=bis.read(fileBuf))!= -1)
{
bos.write(fileBuf,0,len);
bos.flush();
}
bis.close();
fis.close();
}
catch(FileNotFoundException ex)
{
System.out.println("创建文件流失败!");
ex.printStackTrace();
}
catch(Exception e)
{
System.out.println("写入文件出错!");
e.printStackTrace();
}
}
private void sendDirec(File file,BufferedWriter bw)
{
System.out.println("filename: "+file);
String direcName=file.getPath();
String realName=direcName.substring(primaryPath.length());
try
{
bw.write("0"+realName);
bw.newLine();
bw.flush();
}
catch(FileNotFoundException ex)
{
System.out.println("创建文件流失败!");
ex.printStackTrace();
}
catch(Exception e)
{
System.out.println("写入文件夹出错!");
e.printStackTrace();
}
}
private void output(BufferedReader br,BufferedInputStream bis,Socket s)
{
String readStr;
byte[] buf = new byte[1024*10];
int len;
try
{
while(true)
{
readStr=br.readLine();
System.out.println(readStr);
String isFile=readStr.substring(0,1);
file=readStr.substring(1);
if(isFile.equals("1"))
{
FileOutputStream fos = new FileOutputStream("E:\\"+file);
BufferedOutputStream bos=new BufferedOutputStream(fos,1024*10);
System.out.println("creating "+file+"......");
while((len=bis.read(buf,0,1024*10))!=-1)
{
bos.write(buf,0,len);
bos.flush();
}
fos.close();
bis.close();
System.out.println("creating "+file+" completed!");
}
else if(isFile.equals("0"))
{
File f=new File("E:\\"+file);
System.out.println("creating directory....."+f);
if(f.mkdir())
System.out.println("creating completed.....");
}
else
return;
}
}
catch(IOException e)
{
e.printStackTrace();
}
}发送端代码:
private void sender(File file,BufferedWriter bw,BufferedOutputStream bos)
{
if(file.isFile())
{
sendFile(file,bw,bos);
}
else
{
sendDirec(file,bw);
File[] fileList=file.listFiles();
for(int i=0;i<fileList.length;i++)
{
if(fileList[i].isFile())
{
sendFile(fileList[i],bw,bos);
}
else if(i<fileList.length)
{
sender(fileList[i],bw,bos);
}
else
{
return;
}
}
}
}
private void sendFile(File file,BufferedWriter bw,BufferedOutputStream bos)
{
System.out.println("filename: "+file);
String path=file.getPath();
String realName=path.substring(primaryPath.length());
BufferedInputStream bis=null;
byte[] fileBuf=new byte[1024*10];
int len;
try
{
FileInputStream fis = new FileInputStream(file);
bis=new BufferedInputStream(fis,1024*10);
bw.write("1"+realName);
bw.newLine();
bw.flush();
while((len=bis.read(fileBuf))!= -1)
{
bos.write(fileBuf,0,len);
bos.flush();
}
bis.close();
fis.close();
}
catch(FileNotFoundException ex)
{
System.out.println("创建文件流失败!");
ex.printStackTrace();
}
catch(Exception e)
{
System.out.println("写入文件出错!");
e.printStackTrace();
}
}
private void sendDirec(File file,BufferedWriter bw)
{
System.out.println("filename: "+file);
String direcName=file.getPath();
String realName=direcName.substring(primaryPath.length());
try
{
bw.write("0"+realName);
bw.newLine();
bw.flush();
}
catch(FileNotFoundException ex)
{
System.out.println("创建文件流失败!");
ex.printStackTrace();
}
catch(Exception e)
{
System.out.println("写入文件夹出错!");
e.printStackTrace();
}
}
弄好结帐···
那样虽然可以得到数据的长度,但是连续传送会产生数据丢失····