diff --git a/pom.xml b/pom.xml
index cf77e99..5dbd4f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
groupId
jcon
- 1.0-SNAPSHOT
+ 1.0
org.slf4j
diff --git a/src/main/java/com/marlonrcfranco/IJcon.java b/src/main/java/com/marlonrcfranco/IJcon.java
index b226016..383adf8 100644
--- a/src/main/java/com/marlonrcfranco/IJcon.java
+++ b/src/main/java/com/marlonrcfranco/IJcon.java
@@ -1,6 +1,7 @@
package com.marlonrcfranco;
import java.io.IOException;
+import java.util.ArrayList;
public interface IJcon {
@@ -85,7 +86,7 @@ enum types {
* @throws IOException
*/
public String listFiles(String IP, String filePath, String user, String pass) throws IOException;
-
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception;
/**
* public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass)
*
diff --git a/src/main/java/com/marlonrcfranco/Jcon.java b/src/main/java/com/marlonrcfranco/Jcon.java
index b97050d..c4fe520 100644
--- a/src/main/java/com/marlonrcfranco/Jcon.java
+++ b/src/main/java/com/marlonrcfranco/Jcon.java
@@ -1,6 +1,7 @@
package com.marlonrcfranco;
import java.io.IOException;
+import java.util.ArrayList;
public class Jcon implements IJcon{
private IJcon jcon;
@@ -51,6 +52,11 @@ public String listFiles(String IP, String filePath, String user, String pass) th
return this.jcon.listFiles(IP,filePath,user,pass);
}
+ @Override
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
+ return null;
+ }
+
@Override
public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass) throws IOException {
return this.jcon.copyFileTo(sourceIP,sourceFilePath,destIP,destFilePath,user,pass);
diff --git a/src/main/java/com/marlonrcfranco/JconFileSystem.java b/src/main/java/com/marlonrcfranco/JconFileSystem.java
index 16a24e7..f6d9144 100644
--- a/src/main/java/com/marlonrcfranco/JconFileSystem.java
+++ b/src/main/java/com/marlonrcfranco/JconFileSystem.java
@@ -1,6 +1,7 @@
package com.marlonrcfranco;
import java.io.*;
+import java.util.ArrayList;
public class JconFileSystem implements IJcon{
@@ -84,7 +85,6 @@ public byte[] writeBytes(String IP, String filePath, String user, String pass, b
} catch (IOException e) {
output=("Erro: Não foi possível escrever no arquivo \""+filePath+"\""
+((e.getMessage() != null)?" ("+e.getMessage()+")":"")).getBytes();
-
}
finally {
if (file != null) file.close();
@@ -139,22 +139,31 @@ public String listFiles(String filePath) throws IOException {
@Override
public String listFiles(String IP, String filePath, String user, String pass) throws IOException {
String output="";
- filePath = filePath.replace("\\", "/");
- if (!filePath.endsWith("/")) filePath+="/";
- File curDir = null;
try {
- curDir = new File(filePath);
- File[] filesList = curDir.listFiles();
- for(File f : filesList){
- output += f.getName()+(f.isDirectory()? "/":"")+"\n";
+ ArrayList listFiles = listFilesAsList(IP, filePath, user, pass);
+ for (File file : listFiles) {
+ output += file + "\n";
}
} catch (Exception e) {
- output = "Error: Could not list the files in \""+filePath+"\".";
+ output += "Error: Could not list the files in \""+filePath+"\".";
if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
}
return output;
}
+ @Override
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
+ ArrayList output = new ArrayList<>();
+ filePath = filePath.replace("\\", "/");
+ if (!filePath.endsWith("/")) filePath+="/";
+ File curDir = new File(filePath);
+ File[] filesList = curDir.listFiles();
+ for(File f : filesList){
+ output.add(f);
+ }
+ return output;
+ }
+
public String copyFileTo(String sourceFilePath, String destFilePath) throws IOException{
return copyFileTo("",sourceFilePath,"",destFilePath,"","");
}
diff --git a/src/main/java/com/marlonrcfranco/JconNFS.java b/src/main/java/com/marlonrcfranco/JconNFS.java
index 47284d7..d4a40e1 100644
--- a/src/main/java/com/marlonrcfranco/JconNFS.java
+++ b/src/main/java/com/marlonrcfranco/JconNFS.java
@@ -7,6 +7,7 @@
import com.emc.ecs.nfsclient.rpc.CredentialUnix;
import java.io.*;
+import java.util.ArrayList;
import java.util.List;
public class JconNFS implements IJcon{
@@ -136,6 +137,11 @@ public String listFiles(String IP, String filePath, String user, String pass) th
return listFiles(IP, sharedFolder, sFilePath, user, pass);
}
+ @Override
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws IOException {
+ return null;
+ }
+
public String listFiles(String IP, String sharedFolder, String path, String user, String pass) {
String output="";
path = path.replace("\\", "/");
diff --git a/src/main/java/com/marlonrcfranco/JconSMB1.java b/src/main/java/com/marlonrcfranco/JconSMB1.java
index 11f3489..a5c317c 100644
--- a/src/main/java/com/marlonrcfranco/JconSMB1.java
+++ b/src/main/java/com/marlonrcfranco/JconSMB1.java
@@ -5,6 +5,7 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
+import java.util.ArrayList;
public class JconSMB1 implements IJcon {
@@ -133,25 +134,37 @@ public String listFiles(String IP, String filePath, String user, String pass) th
String output="";
filePath=filePath.replace("\\", "/");
if (!filePath.endsWith("/") && !"".equalsIgnoreCase(filePath.trim())) filePath+="/";
- NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
String path="smb://"+IP+"/"+filePath;
- SmbFile smbFile=null;
try {
- smbFile = new SmbFile(path,auth);
- SmbFile[] aSmbFiles = smbFile.listFiles();
+ ArrayList aSmbFiles = listFilesAsList(IP, filePath, user, pass);
for (SmbFile smbF : aSmbFiles) {
output+=smbF.getName()+"\n";
}
} catch (MalformedURLException e) {
output="Erro: Nao foi possivel localizar o caminho \"" + path + "\"";
if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
- }catch (SmbException e) {
+ }catch (Exception e) {
output="Erro: Verifique se o usuário e senha estão corretos, e se possui permissão para acessar o caminho \"" + path + "\"";
if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
}
return output;
}
+ @Override
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
+ ArrayList output = new ArrayList<>();
+ filePath=filePath.replace("\\", "/");
+ if (!filePath.endsWith("/") && !"".equalsIgnoreCase(filePath.trim())) filePath+="/";
+ String path="smb://"+IP+"/"+filePath;
+ NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
+ SmbFile smbFile = new SmbFile(path,auth);
+ SmbFile[] aSmbFiles = smbFile.listFiles();
+ for (SmbFile smbF : aSmbFiles) {
+ output.add(smbF);
+ }
+ return output;
+ }
+
@Override
public String copyFileTo(String sourceIP, String sourceFilePath, String destIP, String destFilePath, String user, String pass) throws IOException {
String output="";
diff --git a/src/main/java/com/marlonrcfranco/JconSMB23.java b/src/main/java/com/marlonrcfranco/JconSMB23.java
index 12678dc..8786d9c 100644
--- a/src/main/java/com/marlonrcfranco/JconSMB23.java
+++ b/src/main/java/com/marlonrcfranco/JconSMB23.java
@@ -16,6 +16,7 @@
import java.io.IOException;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashSet;
@@ -202,36 +203,53 @@ public String copyFileTo(String sourceIP, String sourceFilePath, String destIP,
@Override
public String listFiles(String IP, String filePath, String user, String pass) throws IOException {
extractSharedPathFromPath(filePath.replace("\\", "/"));
- return listFiles(IP, sharedFolder, sFilePath, user, pass, null);
- }
-
- public String listFiles(String IP, String sharedFolder, String path, String user, String pass, String domain) {
String output="";
+ boolean isDirectory = false;
sharedFolder = parsePath(sharedFolder);
- path = parsePath(path);
+ String path = parsePath(sFilePath);
if (!path.trim().endsWith("/") && !"".equalsIgnoreCase(path.trim())) path+="/";
- boolean isDirectory = false;
- SMBClient client = new SMBClient();
- try (Connection connection = client.connect(IP)) {
- AuthenticationContext ac = new AuthenticationContext(user, pass.toCharArray(),domain);
- Session session = connection.authenticate(ac);
- // Connect to Share
- try (DiskShare share = (DiskShare) session.connectShare(sharedFolder)) {
- for (FileIdBothDirectoryInformation f : share.list(path, "*")) {
- isDirectory = f.getFileAttributes()==FileAttributes.FILE_ATTRIBUTE_DIRECTORY.getValue();
- output+= f.getFileName() + (isDirectory? "/" : "") + "\n";
- }
- } catch (SMBApiException e) {
- output="Erro: Nao foi possivel localizar o diretorio "+sharedFolder+(!"".equalsIgnoreCase((sharedFolder+path).trim())? "/" : "")+path;
- if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
+ try {
+ ArrayList list = listFilesAsList(IP, sharedFolder, sFilePath, user, pass, null);
+ for (FileIdBothDirectoryInformation f : list) {
+ isDirectory = f.getFileAttributes()==FileAttributes.FILE_ATTRIBUTE_DIRECTORY.getValue();
+ output+= f.getFileName() + (isDirectory? "/" : "") + "\n";
}
} catch (IOException e) {
- output="Erro: Nao foi possivel listar os arquivos do diretorio: "+sharedFolder;
+ output="Erro: Nao foi possivel listar os arquivos do diretorio: "+sharedFolder;
+ if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
+ } catch (Exception e) {
+ output="Erro: Nao foi possivel localizar o diretorio "+sharedFolder+(!"".equalsIgnoreCase((sharedFolder+path).trim())? "/" : "")+path;
if (e.getMessage() != null) output+=" ("+e.getMessage()+")";
}
return output;
}
+ @Override
+ public ArrayList listFilesAsList(String IP, String filePath, String user, String pass) throws Exception {
+ extractSharedPathFromPath(filePath.replace("\\", "/"));
+ return listFilesAsList(IP, sharedFolder, sFilePath, user, pass, null);
+ }
+
+ public ArrayList listFilesAsList(String IP, String sharedFolder, String path, String user, String pass, String domain) throws Exception {
+ ArrayList output = new ArrayList<>();
+ sharedFolder = parsePath(sharedFolder);
+ path = parsePath(path);
+ if (!path.trim().endsWith("/") && !"".equalsIgnoreCase(path.trim())) path+="/";
+ SMBClient client = new SMBClient();
+ Connection connection = client.connect(IP);
+ AuthenticationContext ac = new AuthenticationContext(user, pass.toCharArray(),domain);
+ Session session = connection.authenticate(ac);
+ // Connect to Share
+ DiskShare share = (DiskShare) session.connectShare(sharedFolder);
+ for (FileIdBothDirectoryInformation f : share.list(path, "*")) {
+ output.add(f);
+ }
+ if (share!=null) share.close();
+ if (session!=null) session.close();
+ if (connection!=null) connection.close();
+ return output;
+ }
+
private String parsePath(String path) {
while (path.startsWith("\\") || path.startsWith("/")) {
path = path.substring(1);
diff --git a/src/main/java/com/marlonrcfranco/Main.java b/src/main/java/com/marlonrcfranco/Main.java
index 67fda20..eb3742a 100644
--- a/src/main/java/com/marlonrcfranco/Main.java
+++ b/src/main/java/com/marlonrcfranco/Main.java
@@ -29,7 +29,7 @@ public static void main(String[] args) {
"\n║ ║ ╠═══╦═══╣ ╚╗ ║║ ║" +
"\n║ ╔═╗ ║ ║ ╔═╣╔═╗║╔╗╚╗║║ ║" +
"\n║ ║ ╚═╝ ║ ╚═╣╚═╝║║╚╗╚╝║ ║" +
- "\n║ ╚═════╩═══╩═══╩╝ ╚══╝ v0.1 ║" +
+ "\n║ ╚═════╩═══╩═══╩╝ ╚══╝ v"+Util.getVersion()+" ║" +
"\n║ @marlonrcfranco ║" +
"\n║ https://github.com/marlonrcfranco/jcon ║" +
"\n║ ║" +
diff --git a/src/main/java/com/marlonrcfranco/Util.java b/src/main/java/com/marlonrcfranco/Util.java
index 664b7f1..c29c17c 100644
--- a/src/main/java/com/marlonrcfranco/Util.java
+++ b/src/main/java/com/marlonrcfranco/Util.java
@@ -19,4 +19,8 @@ public static byte[] toByteArray(InputStream in) throws IOException {
}
return os.toByteArray();
}
+
+ public static String getVersion() {
+ return "1.0";
+ }
}
diff --git a/src/main/java/tests/JconFileSystemTest.java b/src/main/java/tests/JconFileSystemTest.java
index b4d0a86..9d50ba1 100644
--- a/src/main/java/tests/JconFileSystemTest.java
+++ b/src/main/java/tests/JconFileSystemTest.java
@@ -4,7 +4,9 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
class JconFileSystemTest {
@@ -173,11 +175,16 @@ public void listFiles() {
System.out.println(response);
assert response.contains("teste10.xml");
+ ArrayList list = jconFS.listFilesAsList("","C:\\Users\\marlon.franco\\Documents","","");
+ assert list.size()==response.split("\\n").length;
+
response = jconFS.delete( "C:\\Users\\marlon.franco\\Documents\\teste10.xml");
assert !response.contains("Erro");
System.out.println(response);
} catch (IOException e) {
assert false;
+ } catch (Exception e) {
+ assert false;
}
}
diff --git a/src/main/java/tests/JconSMB1Test.java b/src/main/java/tests/JconSMB1Test.java
index c207a53..961df33 100644
--- a/src/main/java/tests/JconSMB1Test.java
+++ b/src/main/java/tests/JconSMB1Test.java
@@ -1,10 +1,12 @@
package tests;
import com.marlonrcfranco.JconSMB1;
+import jcifs.smb.SmbFile;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
+import java.util.ArrayList;
class JconSMB1Test {
@@ -177,12 +179,17 @@ public void listFiles() {
System.out.println(response);
assert response.contains("fileTest123.xml");
+ ArrayList list = jSMB1.listFilesAsList(IP,"/Marlon/Teste",user,pass);
+ assert list.size()==response.split("\\n").length;
+
response = jSMB1.delete(IP,"/Marlon/Teste/fileTest123.xml",user,pass);
System.out.println(response);
assert !response.contains("Erro");
} catch (IOException e) {
assert false;
+ } catch (Exception e) {
+ assert false;
}
}
diff --git a/src/main/java/tests/JconSMB23Test.java b/src/main/java/tests/JconSMB23Test.java
index 9f109a3..d2f3075 100644
--- a/src/main/java/tests/JconSMB23Test.java
+++ b/src/main/java/tests/JconSMB23Test.java
@@ -1,10 +1,13 @@
package tests;
+import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
import com.marlonrcfranco.JconSMB23;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
+import java.nio.file.FileAlreadyExistsException;
+import java.util.ArrayList;
class JconSMB23Test {
@@ -133,6 +136,9 @@ public void listFiles() {
response = jSMBJ.listFiles(IP,"Marlon",user,pass);
assert response.contains("fileTest123.xml");
+ ArrayList list = jSMBJ.listFilesAsList(IP,"Marlon",user,pass);
+ assert list.size()==response.split("\\n").length;
+
response = jSMBJ.delete(IP,"/Marlon/Teste/fileTest123.xml",user,pass);
System.out.println(response);
assert !response.contains("Erro");
@@ -141,6 +147,8 @@ public void listFiles() {
assert !response.contains("Erro");
} catch (IOException e) {
assert false;
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
diff --git a/target/classes/com/marlonrcfranco/IJcon$types.class b/target/classes/com/marlonrcfranco/IJcon$types.class
index 738f146..d039768 100644
Binary files a/target/classes/com/marlonrcfranco/IJcon$types.class and b/target/classes/com/marlonrcfranco/IJcon$types.class differ
diff --git a/target/classes/com/marlonrcfranco/IJcon.class b/target/classes/com/marlonrcfranco/IJcon.class
index 79a2b3d..639b3e5 100644
Binary files a/target/classes/com/marlonrcfranco/IJcon.class and b/target/classes/com/marlonrcfranco/IJcon.class differ
diff --git a/target/classes/com/marlonrcfranco/Jcon.class b/target/classes/com/marlonrcfranco/Jcon.class
index 7e2b3dd..8e41f3e 100644
Binary files a/target/classes/com/marlonrcfranco/Jcon.class and b/target/classes/com/marlonrcfranco/Jcon.class differ
diff --git a/target/classes/com/marlonrcfranco/JconFileSystem.class b/target/classes/com/marlonrcfranco/JconFileSystem.class
index bcdc8a7..8d3a7fe 100644
Binary files a/target/classes/com/marlonrcfranco/JconFileSystem.class and b/target/classes/com/marlonrcfranco/JconFileSystem.class differ
diff --git a/target/classes/com/marlonrcfranco/JconNFS.class b/target/classes/com/marlonrcfranco/JconNFS.class
index 66cc66a..b7a9339 100644
Binary files a/target/classes/com/marlonrcfranco/JconNFS.class and b/target/classes/com/marlonrcfranco/JconNFS.class differ
diff --git a/target/classes/com/marlonrcfranco/JconSMB1.class b/target/classes/com/marlonrcfranco/JconSMB1.class
index 9707c90..f066444 100644
Binary files a/target/classes/com/marlonrcfranco/JconSMB1.class and b/target/classes/com/marlonrcfranco/JconSMB1.class differ
diff --git a/target/classes/com/marlonrcfranco/JconSMB23.class b/target/classes/com/marlonrcfranco/JconSMB23.class
index 350b42f..f1bdf3b 100644
Binary files a/target/classes/com/marlonrcfranco/JconSMB23.class and b/target/classes/com/marlonrcfranco/JconSMB23.class differ
diff --git a/target/classes/com/marlonrcfranco/Main.class b/target/classes/com/marlonrcfranco/Main.class
index 5ece0ac..73cd3f9 100644
Binary files a/target/classes/com/marlonrcfranco/Main.class and b/target/classes/com/marlonrcfranco/Main.class differ
diff --git a/target/classes/com/marlonrcfranco/Util.class b/target/classes/com/marlonrcfranco/Util.class
index d947785..bace74d 100644
Binary files a/target/classes/com/marlonrcfranco/Util.class and b/target/classes/com/marlonrcfranco/Util.class differ
diff --git a/target/classes/tests/JconFileSystemTest.class b/target/classes/tests/JconFileSystemTest.class
index 675a389..0348cb8 100644
Binary files a/target/classes/tests/JconFileSystemTest.class and b/target/classes/tests/JconFileSystemTest.class differ
diff --git a/target/classes/tests/JconSMB1Test.class b/target/classes/tests/JconSMB1Test.class
index ad53b76..6c590d0 100644
Binary files a/target/classes/tests/JconSMB1Test.class and b/target/classes/tests/JconSMB1Test.class differ
diff --git a/target/classes/tests/JconSMB23Test.class b/target/classes/tests/JconSMB23Test.class
index d598fc3..af8fa07 100644
Binary files a/target/classes/tests/JconSMB23Test.class and b/target/classes/tests/JconSMB23Test.class differ
diff --git a/target/jcon.jar b/target/jcon.jar
index c03871c..9cac1eb 100644
Binary files a/target/jcon.jar and b/target/jcon.jar differ