[Android]Sambaサーバからファイルを取得する
Windowsファイルサーバからファイルを読みたい
Android端末からWindowsで共有されているファイルを見たいんだ!
と、そんな案件が振り込んできました
WindowsということはSambaです
Androidでは標準でSambaには対応していないとのこと、、、
調べると、JCIFSというライブラリが利用できそう
JCIFSについて
Javaのライブラリです
下記URLからjarファイルをダウンロードしましょう
https://jcifs.samba.org/
今日時点の最新バージョンは「jcifs-1.3.18.jar」となっています
こいつをダウンロードして、プロジェクトに突っ込みましょう
AndroidStudio の場合、app/libsフォルダに突っ込みましょう
ちなみに、JCIFSはLGPLライセンスです
GNU Lesser General Public License – wikipedia
無料で使えるんですが、製品として販売するためにはソースコードの開示が必要です
っていうライセンス形態みたいです
なかなかつらめかも、、、
コーディング
兎にも角にも、実際に使ってみましょう
結構シンプルな感じです
public String getData(String _user, String _pass, String _server, String _path) { String user = _user; String pass = _pass; String server = _server; String path = _path; String smb = "smb://" + user + ":" + pass + "@" + server + "/" + path; String data = ""; SmbFileInputStream sfis = null; try { sfis = new SmbFileInputStream(smb); BufferedReader br = new BufferedReader(new InputStreamReader(sfis)); String str = br.readLine(); while(str != null){ System.out.println(str); data += str + System.getProperty("line.separator"); str = br.readLine(); } } catch (SmbException e) { e.printStackTrace(); return e.getMessage(); } catch (MalformedURLException e) { e.printStackTrace(); return e.getMessage(); } catch (UnknownHostException e) { e.printStackTrace(); return e.getMessage(); } catch (IOException e) { e.printStackTrace(); return e.getMessage(); } return data; }
SmbFileInputStreamクラスのインスタンスを作ります
その際、SambaのURL(URI?)を与えてやります
smb:[ユーザ名]:[パスワード]@[サーバ]/[path]
という感じで指定します
うまくいくと、InputStreamとして読み込むことができます
実際に動かした結果こんな感じ
text.txtの内容が綺麗に読めました
サンプルソース
サンプルのソースファイルを下記に置いてみました。
https://github.com/s-makinaga/AndroidSambaTest
SambaLoaderというClassを作っているので、簡単に使用できるようにしたつもりです
ひとまずReadOnlyなので、Write機能も実装したいなと考えています