1

ByteArray在一个文件中写了一个。然后我试图ByteArray从同一个文件中读回它..

public static void main(String[] args) throws Exception {

        //.. some code

        writeFile(allWrittenBytesTest);

        readFile();

}

/**
 * Write the file in Java
 * @param byteArray
 */
public static void writeFile(byte[] byteArray) {

    try{
        File file = new File("bytearrayfile");

        boolean success = file.delete();

        if(!success) {
            System.out.println("not able to delete the file");
        }

        FileOutputStream output = new FileOutputStream(file);
        IOUtils.write(byteArray, output);           
    } catch (Exception ex) {
        ex.printStackTrace();
    }   

现在,我无法理解如何从同一个文件中读取 ByteArray?下面是我的 readFile 方法-

public static void readFile() {

    BufferedReader reader = null;
    try {

        File file = new File("bytearrayfile");

        reader = new BufferedReader(new FileReader(file));

        String line = null;
        while ((line = reader.readLine()) != null) {

            // this doesn't work I know but not sure how to read that?
            DataInputStream inTest = new DataInputStream(new ByteArrayInputStream(line));

            // some other code to deserialize that ByteArray

        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

3 回答 3

2

好吧,如果您使用的是 org.apache.commons.io 包,您可以使用:

        bytes = FileUtils.readFileToByteArray(new File(file));  

例子:

    public static void readFile() {

        BufferedReader reader = null;
        try {
            File file = new File("bytearrayfile");
            reader = new BufferedReader(new FileReader(file));          
            byte[] bytes = FileUtils.readFileToByteArray(file); 
            System.out.println(new String(bytes, "UTF-8").toCharArray());       

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

我希望这有帮助。

于 2013-09-28T05:19:43.230 回答
-1

公共类 FileToByteArray {

public static void main(String a[]){

    String fileName = "C:/MyFile.txt";
    InputStream is = null;
    try {
        is = new FileInputStream(fileName);
        byte content[] = new byte[2*1024];
        int readCount = 0;
        while((readCount = is.read(content)) > 0){
            System.out.println(new String(content, 0, readCount-1));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try{
            if(is != null) is.close();
        } catch(Exception ex){

        }
    }
}

}

于 2013-09-28T06:43:11.847 回答
-1

您的问题很有趣,因为如果您与流的概念进行交互,您几乎总是得到字节而不是字符串。您使用了将文件读取到字符串的习惯用法:

    reader = new BufferedReader(new FileReader(file));

    String line = null;
    while ((line = reader.readLine()) != null) {
          // ...code to use each line of a file in string format! 
    }

但这实际上是为了逐行读取文件到字符串。

您实际上可以只使用普通的 FileInputStream 但这次使用另一个习惯用法(或者您使用如上所述的 Apache Commons):

 fis = new FileInputStream(filePath);
 int currentBytes = 0
 while((currentBytes=fis.read()) > -1){
   //...code to use the file stream byte by byte
 }

您可以将整数(一个字节 2^8 的值介于 0 和 255 之间)放入一个字节数组中。现在的问题是您不知道从流中接收到多少字节(文件有多大),因此您无法确定生成的字节数组的大小。一种解决方案是使用列表(如 ArrayList),然后使用 list.toArray(new byte[list.size()]) 方法将其转换为 byte[],但我不太喜欢这个。还有一个名为 ByteArrayOutputStream 的类可以透明地为您处理 byte[] 的大小调整。

代码如下所示:

 fis = new FileInputStream(filePath);
 int currentBytes = 0
 ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream()
 while((currentBytes=fis.read()) > -1){
   byteBuffer.write(currentBytes)
 }
 byte[] yourByteArray = byteBuffer.toByteArray()

代码未经测试,它是从我的大脑中编写的。我希望它有效。

于 2013-09-28T05:44:30.587 回答