Получить точный размер файла через smbjJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Получить точный размер файла через smbj

Сообщение Anonymous »

Я пытаюсь прочитать файлы из общего ресурса SMB с помощью библиотеки smbj.
Мой код должен считывать массив байтов (см. ниже), и перед чтением мне нужно знать размер файла. К сожалению, изучая код, я могу найти только методы для получения выделенного размера, который обычно больше реального размера файла.
Так как же мне получить фактический размер файла в байтах? ?
Мой (неправильный код) пока выглядит так:

Код: Выделить всё

    SMBClient client = new SMBClient();
try(Connection connection = client.connect(hostname)) {
AuthenticationContext ac = new AuthenticationContext(user, password.toCharArray(), domain);
Session session = connection.authenticate(ac);

// Connect to Share
try (DiskShare share = (DiskShare) session.connectShare(shareName)) {
FileAllInformation fileInfo = share.getFileInformation(path);
File file = share.openFile(path, EnumSet.of(AccessMask.GENERIC_READ), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN, null);

long fileSize = fileInfo.getStandardInformation().getAllocationSize();

// this part is problematic as it throws an IOException
// if not the fileSize amount of bytes can be read
byte[] bytes = IOUtils.toByteArray(fileIn, fileInfo.getStandardInformation().getAllocationSize());
}
}
Зачем читать файлы в массив байтов?
Я пишу плагин протокола для Apache Nutch. А API ожидает, что содержимое файла будет предоставлено в формате byte[].
Почему бы IOUtils не прочитать весь файл?
Вызов IOUtils.toByteArray(fileIn) прочитает весь файл. Но это завершается с ошибкой IOException, если размер файла превышает 2 ГБ. Поэтому я хотел бы указать максимальный размер для чтения. И здесь API IOUtils позволяет указать количество байтов с помощью IOUtils.toByteArray(fileIn, sum). Но предостережение заключается в том, что теперь вызов завершится неудачей, если файл меньше. Таким образом, мне нужно знать размер файла (и, следовательно, количество байтов, которые я хочу прочитать), прежде чем делать этот вызов.

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-via-smbj
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»