teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

サンプルコードを追記

2019/01/11 03:51

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -20,4 +20,38 @@
20
20
 
21
21
  2. JCIFS - SMBでWindowsファイル共有サービスを利用できるようCIFSの機能をサポートするJavaのライブラリです。
22
22
 
23
- ですので、Windowsマシン間のファイル共有と言うことでしたらSambaはとりあえず関係ありません。
23
+ ですので、Windowsマシン間のファイル共有と言うことでしたらSambaはとりあえず関係ありません。
24
+
25
+ ---
26
+ **追記しました2:2019-01-11 12:50**
27
+
28
+ `SmbFile.copyTo`はリモートのファイル同士しかコピーできないので、コピー元やコピー先がローカルのファイルの場合は例えば`FileInputStream`や`FileOutputStrem`を使って自力でコピーする必要があるようです。ローカルのファイルをリモートにコピーする例を示します。コードはあえて冗長に書いてるところもありますのであくまで参考程度としてください。
29
+
30
+ ```Java
31
+ private void copy3() {
32
+ //String localPath = "D:\project\src.txt";
33
+ // PATH区切り文字としてエスケープが必要な'\'ではなく、'/'でもOK
34
+ String localPath = "D:/project/src.txt";
35
+ String remotePath = "smb://user:password@192.168.11.101/temp/dest.txt";
36
+
37
+ try {
38
+ FileInputStream ifs = new FileInputStream(localPath);
39
+ SmbFile dst = new SmbFile(remotePath);
40
+ SmbFileOutputStream ofs = new SmbFileOutputStream(dst);
41
+
42
+ byte[] data = new byte[1024];
43
+ for (;;) {
44
+ int len = ifs.read(data);
45
+ if (len == -1) {
46
+ break;
47
+ }
48
+ ofs.write(data, 0, len);
49
+ }
50
+ ifs.close();
51
+ ofs.close();
52
+
53
+ } catch (Exception e) {
54
+ e.printStackTrace();
55
+ }
56
+ }
57
+ ```

1

追記

2019/01/11 03:50

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -8,4 +8,16 @@
8
8
 
9
9
  ※ところでご提示のソースは正しく動作したものでしょうか? こちらで試したところでは
10
10
  `String path = "c:\test\javac_tt.txt"`のコードはエスケープ文字が正しくないのでコンパイルエラーとなり、更に
11
- `SmbFileInputStream sfis = new SmbFileInputStream(path);`はWindowsのPATH文字列は受け付けず、`jcifs.smb.SmbException`例外が発生したのですが。。。
11
+ `SmbFileInputStream sfis = new SmbFileInputStream(path);`はWindowsのPATH文字列は受け付けず、`jcifs.smb.SmbException`例外が発生したのですが。。。
12
+
13
+ ---
14
+ **追記しました:2019-01-11 11:49**
15
+
16
+ 質問のタイトルとご提示のコードの内容、コメントから推察するに、少し混乱があるようです。
17
+
18
+ 1. Samba - Windowsのネットワークファイル共有を実現する、unix系OS上で動くプログラム(製品)の名前です。
19
+ 通信プロトコルとしてSMB(Server Message Block)を使い、WindowsとUnix系OS間でファイル等の共有を行っています。
20
+
21
+ 2. JCIFS - SMBでWindowsファイル共有サービスを利用できるようCIFSの機能をサポートするJavaのライブラリです。
22
+
23
+ ですので、Windowsマシン間のファイル共有と言うことでしたらSambaはとりあえず関係ありません。