Android smb共享文件的下载

来源:互联网 发布:手机淘宝怎么抢购 编辑:程序博客网 时间:2024/05/05 21:16
package com.example.udp_url;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


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


import android.R.integer;
import android.R.string;
import android.media.MediaMuxer.OutputFormat;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener
{


private SmbFile rootSmbFile;
private String cutPath, shareFileName;
private String localFolder = "/storage/sdcard1";
private List<SmbFile> smbFilesList = new ArrayList<SmbFile>();
private Handler handler;
private EditText mEditText, fEditText;
private TextView mTextView;
private Button mButton;
private int DOWNLOAD_SUCCESS = 1;
private int DOWNLOAD_ERROR = 2;


@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


mEditText = (EditText) findViewById(R.id.ip);
fEditText = (EditText) findViewById(R.id.folder);
mTextView = (TextView) findViewById(R.id.info);
mButton = (Button) findViewById(R.id.connect);


mButton.setOnClickListener(this);


handler = new Handler()
{


@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what)
{
case 1 :
Toast.makeText(MainActivity.this, "download success",
Toast.LENGTH_SHORT).show();
break;
case 2 :
Toast.makeText(MainActivity.this, "download error",
Toast.LENGTH_SHORT).show();
break;


default :
break;
}
}
};


}


@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


public boolean smbDowndload()
{


readFiles(rootSmbFile);


for (SmbFile smbFile : smbFilesList)
{
InputStream inputStream = null;
OutputStream outputStream = null;


try
{
inputStream = new BufferedInputStream(new SmbFileInputStream(
smbFile));


String localPath = localTree(smbFile.getPath());


File localFile = new File(localPath);
File file = localFile.getParentFile();
if (!file.exists())
{
file.mkdirs();
}


outputStream = new BufferedOutputStream(new FileOutputStream(
localFile));
byte[] buffer = new byte[1024 * 1024];
int i = 0;
while ((i = inputStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, i);


}
} catch (Exception e)
{
// TODO: handle exception
Log.i("Aaron", "download error");
return false;
} finally
{
try
{
outputStream.close();
inputStream.close();
} catch (Exception e2)
{
// TODO: handle exception
Log.i("Aaron", "close error");
return false;
}
}


}
return true;
}


public List<SmbFile> readFiles(SmbFile smbFile)
{
try
{
SmbFile[] alllSmbFiles = smbFile.listFiles();
for (SmbFile mSmbFile : alllSmbFiles)
{
if (mSmbFile.isDirectory())
{
readFiles(mSmbFile);
}
else
{
smbFilesList.add(mSmbFile);
}
}
} catch (SmbException e)
{
// TODO Auto-generated catch block
Log.i("Aaron", "read file error");
e.printStackTrace();
}
return smbFilesList;
}


@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
smbDownLoadTask smb = new smbDownLoadTask();


cutPath = "smb://guest:@" + mEditText.getText().toString().trim();
shareFileName = fEditText.getText().toString().trim();
smb.execute(mEditText.getText().toString().trim(), shareFileName);
}


public class smbDownLoadTask extends AsyncTask<String, Void, Integer>
{


@Override
protected Integer doInBackground(String... params)
{
// TODO Auto-generated method stub
try
{
rootSmbFile = new SmbFile("smb://guest:@" + params[0] + "/"
+ params[1] + "/");


rootSmbFile.connect();
} catch (Exception e)
{
// TODO Auto-generated catch block
Log.i("Aaron", "connect error");
return -1;
}
return 1;
}


@Override
protected void onPostExecute(Integer result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result == 1)
{
Toast.makeText(MainActivity.this, "success to connect",
Toast.LENGTH_SHORT).show();
new Thread(new down()).start();
}
else
{
Toast.makeText(MainActivity.this, "connect error",
Toast.LENGTH_SHORT).show();
}


/*
* if (smbDowndload("/storage/sdcard1")) {
* Toast.makeText(MainActivity.this, "Download success",
* Toast.LENGTH_SHORT).show(); } else {
* Toast.makeText(MainActivity.this, "Download error",
* Toast.LENGTH_SHORT).show(); }
*/


}


}


public class down implements Runnable
{


@Override
public void run()
{
// TODO Auto-generated method stub
// smbDowndload("/storage/sdcard1");
String storeDir = localFolder + File.separator + shareFileName;
File file = new File(storeDir);
if (file.exists())
{
deleteFiles(file);
}
if (smbDowndload())
{
/*
* Toast.makeText(MainActivity.this, "Download success",
* Toast.LENGTH_SHORT).show();
*/
handler.sendEmptyMessage(DOWNLOAD_SUCCESS);
Log.i("Aaron", "download success");
}
else
{
handler.sendEmptyMessage(DOWNLOAD_ERROR);
Log.i("Aaron", "download error");
/*
* Toast.makeText(MainActivity.this, "Download error",
* Toast.LENGTH_SHORT).show();
*/
}
}


}


public String localTree(String path)
{
return path.replaceAll(cutPath, localFolder);


}


public void deleteFiles(File file)
{
if (file.isFile())
{
file.delete();
return;
}
if (file.isDirectory())
{
File[] childFiles = file.listFiles();
if (childFiles == null || childFiles.length == 0)
{
file.delete();
return;
}
for (int i = 0; i < childFiles.length; i++)
{
deleteFiles(childFiles[i]);
}
file.delete();
}

}

}




记得加权限

0 0