Как преобразовать байтовый массив в файл - PullRequest
1 голос
/ 24 августа 2011

Я подключился к ftp-местоположению , используя;

URL url = new URL("ftp://user:password@mydomain.com/" + file_name +";type=i");

Я считал содержимое в байтовый массив, как показано ниже;

byte[] buffer = new byte[1024];
int count = 0;
while((count = fis.read(buffer)) > 0) 
{
    //check if bytes in buffer is a file
}

Я хочучтобы иметь возможность проверить, является ли байты в buffer файлом без явной передачи определенного файла для записи в него, например:

    File xfile= new File("dir1/");
    FileOutputStream fos = new FileOutputStream(xfile);
    fos.write(bytes);

    if(xfile.isFile())
    {

    }

В идеальном мире что-то вроде этого;

    File xfile = new File(buffer);//Note: you cannot do this in java
    if(xfile.isFile())
    {

    }

isFile() - проверка байтов, считанных с ftp, в файл.Я не хочу передавать явное имя файла , поскольку я не знаю имени файла в ftp-папке .

Есть ли какие-либо решения?

Ответы [ 4 ]

2 голосов
/ 24 августа 2011

Что такое файл ?

Компьютерный файл - это блок произвольной информации, [...] доступной для компьютерной программы и обычно основанной на каком-либо долговременном хранилище. Файл надежен в том смысле, что он остается доступным для использования программами после завершения текущей программы.

Ваши байты, которые хранятся в байтовом массиве, будут частью файла, если вы запишете их в какое-то долговременное хранилище .

Конечно, мы часто говорим, что читаем файл или пишем файл, но в основном мы читаем байты из файла и пишем байты в файл .

Таким образом, мы не можем проверить байтовый массив, независимо от того, является ли его содержимое файлом или нет. Просто потому, что каждый байтовый массив можно использовать для создания файла (даже пустого массива).

Кстати - ftp-сервер не отправляет файл, он (1) читает байты и (2) имя файла и (3) отправляет байты и (4) имя файла, чтобы клиент мог (5) прочитать байты и (6) имя файла и использовать оба набора данных для (7) создания файла. У ftp-сервера нет для доступа к файлу, он может брать байты и имена из базы данных или создавать оба в памяти ...

1 голос
/ 24 августа 2011

Нет способа сделать это легко.

Файл - это байтовый массив на диске, а байтовый массив будет файлом, если вы запишите его на диск.Не существует надежного способа сообщить , что в данных, которые вы только что получили, без анализа данных и проверки, можете ли вы найти в них действительный заголовок файла.

1 голос
/ 24 августа 2011

Полагаю, вы не можете проверить, является ли массив byte [] файлом или нет.Почему бы вам просто не использовать уже написанную и протестированную библиотеку, например, например: http://commons.apache.org/net/

0 голосов
/ 24 августа 2011

Где isFile () file означает, что содержимое, извлеченное из потока ftp, является файлом.

Ответ на этот вопрос прост.Вы не можете сделать это, потому что это не имеет никакого смысла.

  • То, что вы прочитали из потока, является последовательностью байтов, хранящихся в памяти.

  • Файл - это последовательность байтов, хранящихся на диске (обычно).

Это не одно и то же.(Или, если вы хотите получить все теоретическое / философское, вы должны ответить на вопрос «когда это последовательность байтов файла, а когда это не файл».


Теперь более разумный вопросспросить может быть:

Как узнать, является ли материал, который я извлекал по FTP, содержимым файла на сервере FTP.

(... asотличается от рендеринга каталога или чего-то еще.)

Ответ в том, что вы не можете быть уверены, что загрузили файл, открыв URLC-соединение с FTP-сервером ... как вы это сделали.например, спросить «Является ли (123) 555-5555« номером телефона? ». Это может быть номером телефона, или это может быть просто последовательность символов, похожая на номер телефона.

...