Добавить в файл с помощью Apache Commons VFS - PullRequest
2 голосов
/ 16 марта 2012

Я хотел бы использовать Apache Commons VFS для добавления текста в файл, если файл уже существует, и создания нового файла, содержащего текст, если файл не существует.

Глядя на Javadoc для VFS, выясняется, что метод getOutputStream (boolean bAppend) в классе FileContent выполнит эту работу, но после довольно обширного поиска в Google я не могу понять, как использовать getOutputStream для добавления текста в файл.

Файловая система, которую я буду использовать с VFS, является локальным файлом (file: //) или CIFS (smb: //).

Причиной использования VFS является то, что программа, над которой я работаю, должна иметь возможность записи в общий ресурс CIFS с использованием определенного имени пользователя / пароля, которое отличается от пользователя, выполняющего программу, и я хочу, чтобы возможность записи в локальной файловой системы или общего ресурса, поэтому я не просто использую JCIFS.

Если кто-нибудь может указать мне правильное направление или предоставить фрагмент кода, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 02 июля 2013

Вот как вы это делаете с Apache Commons VFS:

FileSystemManager fsManager;
PrintWriter pw = null; 
OutputStream out = null;

try {
    fsManager = VFS.getManager();
    if (fsManager != null) {

        FileObject fileObj = fsManager.resolveFile("file://C:/folder/abc.txt");

        // if the file does not exist, this method creates it, and the parent folder, if necessary
        // if the file does exist, it appends whatever is written to the output stream
        out = fileObj.getContent().getOutputStream(true);

        pw = new PrintWriter(out);
        pw.write("Append this string.");
        pw.flush();

        if (fileObj != null) {
            fileObj.close();
        }
        ((DefaultFileSystemManager) fsManager).close();
    }

} catch (FileSystemException e) {
    e.printStackTrace();
} finally {
    if (pw != null) {
        pw.close();
    }
}
1 голос
/ 16 марта 2012

Я не знаком с VFS, но вы можете заключить OutputStream в PrintWriter и использовать его для добавления текста.

PrintWriter pw = new PrintWriter(outputStream);
pw.append("Hello, World");
pw.flush();
pw.close();

Обратите внимание, что PrintWriter использует кодировку символов по умолчанию.

...