java 使用 jcifs 读取文件的最简单方法

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43487647/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 07:28:13  来源:igfitidea点击:

Simplest way to read a file using jcifs

javajcifs

提问by Blaine

I am trying to read a file from a network share using the external jcifs library. Most sample codes I can find for reading files are quite complex, potentially unnecessarily so. I have found a simple way to writeto a file as seen below. Is there a way to read a file using similar syntax?

我正在尝试使用外部jcifs 库从网络共享中读取文件。我能找到的大多数用于读取文件的示例代码都非常复杂,可能是不必要的。我找到了一种写入文件的简单方法,如下所示。有没有办法使用类似的语法读取文件?

SmbFile file= null;
try {
    String url = "smb://"+serverAddress+"/"+sharename+"/TEST.txt";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, username, password);
    file = new SmbFile(url, auth);
    SmbFileOutputStream out= new SmbFileOutputStream(file);
    out.write("test string".getBytes());
    out.flush();
    out.close();
} catch(Exception e) {
    JOptionPane.showMessageDialog(null, "ERROR: "+e);
}

回答by Marcin Pietraszek

SmbFile file = null;
byte[] buffer = new byte[1024];
try {
    String url = "smb://"+serverAddress+"/"+sharename+"/TEST.txt";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, username, password);
    file = new SmbFile(url, auth);
    try (SmbFileInputStream in = new SmbFileInputStream(file)) {
        int bytesRead = 0;
        do {
            bytesRead = in.read(buffer)
            // here you have "bytesRead" in buffer array
        } 
        while (bytesRead > 0);
    }
} catch(Exception e) {
    JOptionPane.showMessageDialog(null, "ERROR: "+e);
}

or even better, assuming that you're working with text files - using BufferedReaderfrom Java SDK:

甚至更好,假设您正在处理文本文件 - 使用BufferedReader来自 Java SDK:

try (BufferedReader reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(file)))) {
    String line = reader.readLine();
    while (line != null) {
        line = reader.readLine();
    }
}

And write with:

并写:

try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new SmbFileOutputStream(file)))) {
    String toWrite = "xxxxx";
    writer.write(toWrite, 0, toWrite.length());
}

回答by Andriy Fedotov

    try {
        String url = "smb://" + serverAddress + "/" + sharename + "/test.txt";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(DOMAIN, USER_NAME, PASSWORD);
        String fileContent = IOUtils.toString(new SmbFileInputStream(new SmbFile(url, auth)), StandardCharsets.UTF_8.name());
        System.out.println(fileContent);
    } catch (Exception e) {
        System.err.println("ERROR: " + e.getMessage());
    }