java访问共享目录

新一篇: jsf结合myfaces实现文件上传

由于工作需要读取局域网中一台机器的 共享目录中的文件,需要jcifs-1.1.11.jar的支持,使用SMB协议,以下是实现了远程读取并复制到本地,然后删除本地文件的功能:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;

public class TestReadSmb {
    
public static void main(String[] args) {
            String smbMachine
="smb://10.108.23.200/temp/说明文件.txt";
            String localPath
="D:/temp";
            File file
=readFromSmb(smbMachine,localPath);
            removeFile(file);
    }


    
/**
     * 从smbMachine读取文件并存储到localpath指定的路径
     * 
     * 
@param smbMachine
     *            共享机器的文件,如smb://xxx:xxx@10.108.23.112/myDocument/测试文本.txt,xxx:xxx是共享机器的用户名密码
     * 
@param localpath
     *            本地路径
     * 
@return
     
*/

public static File readFromSmb(String smbMachine,String localpath){
        File localfile
=null;
        InputStream bis
=null;
        OutputStream bos
=null;
        
try {
            SmbFile rmifile 
= new SmbFile(smbMachine);
            String filename
=rmifile.getName();
            bis
=new BufferedInputStream(new SmbFileInputStream(rmifile));
            localfile
=new File(localpath+File.separator+filename);
            bos
=new BufferedOutputStream(new FileOutputStream(localfile));
            
int length=rmifile.getContentLength();
            
byte[] buffer=new byte[length];
            Date date
=new Date();
            bis.read(buffer);
            bos.write(buffer);            
            Date end
=new Date();
            
int time= (int) ((end.getTime()-date.getTime())/1000);
            
if(time>0)
                System.out.println(
"用时:"+time+""+"速度:"+length/time/1024+"kb/秒");            
        }
 catch (Exception e) {
            
// TODO Auto-generated catch block
            System.out.println(e.getMessage());
            
        }
finally{
            
try {
                bos.close();
                bis.close();
            }
 catch (IOException e) {
//                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }

        
return localfile;
    }

    
public static boolean removeFile(File file) {
        
return file.delete();
    }

}

posted @ 2008-05-19 14:53  南守拥  阅读(1447)  评论(2编辑  收藏  举报