Android網路程式設計之區域網傳輸檔案:

首先建立一個socket管理類,該類是傳輸檔案的核心類,主要用來發送檔案和接收檔案

具體程式碼如下:

 package com.jiao.filesend;

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; import android.os.Environment; /**
* Socket管理類
* 1、接收檔案
* 2、傳送檔案
* @author jiaocg
*
*/
public class SocketManager {
private ServerSocket server;
public SocketManager(ServerSocket server){
this.server = server;
}
//接收檔案
public String ReceiveFile(){
try{
//接收檔名
Socket name = server.accept();
//獲取資料的輸入流
InputStream nameStream = name.getInputStream();
//字元流轉換為位元組流
InputStreamReader streamReader = new InputStreamReader(nameStream);
BufferedReader br = new BufferedReader(streamReader);
//接收到檔名
String fileName = br.readLine();
br.close();
streamReader.close();
nameStream.close();
name.close();
//接收檔案資料
Socket data = server.accept();
InputStream dataStream = data.getInputStream();
String savePath = Environment.getExternalStorageDirectory().getPath() + "/" + fileName;
FileOutputStream file = new FileOutputStream(savePath, false);
byte[] buffer = new byte[1024];
int size = -1;
while ((size = dataStream.read(buffer)) != -1){
file.write(buffer, 0 ,size);
}
file.close();
dataStream.close();
data.close();
return fileName + "---接收完成"+"---儲存至:"+savePath;
}catch(Exception e){
System.out.println(e.toString());
return "接收錯誤:\n" + e.getMessage();
}
} //傳送檔案
public String SendFile(String fileName, String path, String ipAddress, int port){
try {
//傳送檔名
//首先發送檔名
Socket name = new Socket(ipAddress, port);
//建立輸出流
OutputStream outputName = name.getOutputStream();
//字元流轉換為位元組流
OutputStreamWriter outputWriter = new OutputStreamWriter(outputName);
//緩衝區
BufferedWriter bwName = new BufferedWriter(outputWriter);
//寫到緩衝區
bwName.write(fileName);
bwName.close();
outputWriter.close();
outputName.close();
name.close(); //傳送檔案資料
Socket data = new Socket(ipAddress, port);
//建立輸出流
OutputStream outputData = data.getOutputStream();
//從檔案系統中的某個檔案中獲得輸入位元組
FileInputStream fileInput = new FileInputStream(path);
int size = -1;
byte[] buffer = new byte[1024];
while((size = fileInput.read(buffer, 0, 1024)) != -1){
outputData.write(buffer, 0, size);
}
outputData.close();
fileInput.close();
data.close();
return fileName + " 傳送完成";
} catch (Exception e) {
return "傳送錯誤:\n" + e.getMessage();
}
}
}

我們可以利用上述的檔案傳輸類,來實現區域網中的檔案傳輸

具體使用程式碼如下:

 // 1、檔名 2、檔案路徑 3、目標ip 4、目標埠
String response = socketManager.SendFile(fileName, filePath,ip, POST);
Message.obtain(handler, 0, response).sendToTarget();

呼叫以上程式碼就可以實現區域網中的檔案傳輸;

注意:以上檔案傳輸屬於網路傳送,記得在子執行緒中執行哦,否則要報錯!