Мне нужно создать и заполнить файл CSV некоторыми данными, а затем поместить его в удаленное место, защищенное именем пользователя и паролем, на клиентском компьютере. Я использую apache-commons CSVPrinter
для записи файла. Запланированное задание записывает файл, но я не могу пройти процесс аутентификации.
UserAuthenticator auth = new StaticUserAuthenticator(domain, userName, password);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo = VFS.getManager().resolveFile(exportLocation + fileName, opts);
BufferedWriter writer = Files.newBufferedWriter(Paths.get(fo.getURL().getPath()), StandardCharsets.UTF_8);
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withDelimiter(';'));
Я получаю java.nio.file.AccessDeniedException
с верхним кодом. Может ли кто-нибудь посоветовать мне, как подойти к проблеме, и сказать мне, что я делаю неправильно?
******************************************************* ** ИЗМЕНИТЬ ******************************************* ****************
Я обновил код до:
UserAuthenticator auth = new StaticUserAuthenticator(domain, userName, password);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo = VFS.getManager().resolveFile(exportLocation + fileName, opts);
FileContent fileContent = fo.getContent();
CSVPrinter csvPrinter = new CSVPrinter((Appendable) fileContent.getOutputStream(),
CSVFormat.DEFAULT.withDelimiter(';'));
Я избавился от BufferedWriter
и заменил его экземпляром FileContent
. Теперь я получаю org.apache.commons.vfs2.FileSystemException: Could not write to "file:////*PATH*/*TO*/*CSV_FILE*.csv"
.
Теперь мой путь к файлу .csv содержит две обратные косые черты в начале, потому что, если я их удалю, строка FileObject fo = VFS.getManager().resolveFile(exportLocation + fileName, opts);
создаст следующее исключение: org.apache.commons.vfs2.FileSystemException: Could not find file with URI "*PATH*\*TO*\*CSV_FILE*.csv" because it is a relative path, and no base URI was provided.
Естественно, это происходит потому, что две обратные косые черты указывают на файл в папке, а не на URI.
Теперь моя проблема: как я могу сохранить обратную косую черту для нужной строки и удалить их при записи в файл в этой строке: CSVPrinter csvPrinter = new CSVPrinter((Appendable) fileContent.getOutputStream(), CSVFormat.DEFAULT.withDelimiter(';'));
?
Кроме того, теперь я вижу, что это последнее исключение было вызвано следующим: java.io.FileNotFoundException: *PATH*\*TO*\*CSV_FILE*.csv (Access is denied)
что означало бы, что я все еще не смог пройти аутентификацию.