如何将字节数组转换为文件

时间:2011-08-24 11:08:51

标签: java file bytearray

我已使用;

连接到 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 个答案:

答案 0 :(得分:2)

什么是文件

  

计算机文件是计算机程序可用的任意信息块,通常基于某种持久存储。文件是持久的,因为在当前程序完成后程序可以使用它。

如果您将将它们写在某种持久存储上,那么存储在字节数组中的字节将成为文件的一部分。

当然,我们经常说我们读取文件或文件,但基本上我们从文件中读取字节将字节写入文件

所以我们不能测试一个字节数组,无论它的内容是否是文件。只是因为每个字节数组都可用于创建文件(甚至是空数组)。

BTW - ftp服务器不发送文件,它(1)读取字节和(2)文件名,(3)发送字节和(4)文件名,以便客户端可以(5)读取字节(6)文件名并使用两个数据集来(7)创建一个文件。 ftp服务器没有 来访问文件,它可以从数据库中获取字节和名称,或者在内存中创建...

答案 1 :(得分:1)

我猜你无法检查byte []数组是否是一个文件。为什么不使用已经编写和测试过的库,例如:http://commons.apache.org/net/

答案 2 :(得分:1)

没有办法轻易做到这一点。

文件是磁盘上的字节数组,如果将文件写入磁盘,则字节数组将是文件。在没有解析数据并检查是否可以在其中找到有效的文件头的情况下,没有可靠的方法告诉您刚收到的数据中的

答案 3 :(得分:0)

  

isFile()文件在哪里表示从ftp流中获取的内容是一个文件。

答案很简单。你不能这样做,因为它没有任何意义。

  • 您从流中读取的内容是存储在内存中的字节序列。

  • 文件是存储在磁盘上的字节序列(通常)。

这些不是一回事。 (或者如果你想获得所有的理论/哲学,你必须回答这个问题“什么时候是文件的字节序列,什么时候不是文件”。


现在提出一个更明智的问题可能是:

  

我如何知道我通过FTP获取的内容是否是FTP服务器上文件的内容。

(...与目录或某物的渲染不同)。

答案是你不能确定你是否通过打开FTP服务器的URLConnection来获取文件......就像你已经完成的那样。这就像问“是'(123)555-5555'一个电话号码?”。它可能是一个电话号码,或者它可能只是一个看起来像电话号码的字符序列。