文件和byte數(shù)組之間相互轉(zhuǎn)換

文件轉(zhuǎn)換成byte數(shù)組

文件轉(zhuǎn)換成byte數(shù)組有兩種方式:

1. 傳統(tǒng)方式

File file = new File("/temp/abc.txt");
//init array with file length
byte[] bytesArray = new byte[(int) file.length()];

FileInputStream fis = new FileInputStream(file);
fis.read(bytesArray); //read file into bytes[]
fis.close();

return bytesArray;

2. NIO方式

String filePath = "/temp/abc.txt";

byte[] bFile = Files.readAllBytes(new File(filePath).toPath());
//or this
byte[] bFile = Files.readAllBytes(Paths.get(filePath));

完整實例

下面的例子展示了如何把讀取的文件內(nèi)容轉(zhuǎn)換成byte數(shù)組,使用了傳統(tǒng)的FileInputStreamjava.nio兩種方式。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author zkzong
 * @date 2017/10/20
 */
public class FileToArrayOfBytes {
    public static void main(String[] args) {

        try {

            // convert file to byte[]
            byte[] bFile = readBytesFromFile("test.txt");

            //java nio
            //byte[] bFile = Files.readAllBytes(new File("test.txt").toPath());
            //byte[] bFile = Files.readAllBytes(Paths.get("test.txt"));

            // save byte[] into a file
            Path path = Paths.get("test2.txt");
            Files.write(path, bFile);

            System.out.println("Done");

            //Print bytes[]
            for (int i = 0; i < bFile.length; i++) {
                System.out.print((char) bFile[i]);
            }

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

    }

    private static byte[] readBytesFromFile(String filePath) {

        FileInputStream fileInputStream = null;
        byte[] bytesArray = null;

        try {

            File file = new File(filePath);
            bytesArray = new byte[(int) file.length()];

            //read file into bytes[]
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(bytesArray);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        return bytesArray;

    }
}

byte數(shù)組轉(zhuǎn)換成文件

byte數(shù)組轉(zhuǎn)換成文件也有兩種方式:

1. 傳統(tǒng)方式

FileOutputStream fos = new FileOutputStream(fileDest);
fos.write(bytesArray);
fos.close();

2. NIO方式

Path path = Paths.get(fileDest);
Files.write(path, bytesArray);

完整實例

下面的例子展示了如何把讀取的文件內(nèi)容轉(zhuǎn)換成byte數(shù)組,并把保存的byte數(shù)組轉(zhuǎn)換成一個新的文件,使用了傳統(tǒng)的try-catch、JDK 7的try-resourcesjava.nio兩種方式。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author zkzong
 * @date 2017/10/20
 */
public class ArrayOfBytesToFile {
    private static final String UPLOAD_FOLDER = "/";

    public static void main(String[] args) {

        FileInputStream fileInputStream = null;

        try {

            File file = new File("test.txt");
            byte[] bFile = new byte[(int) file.length()];

            //read file into bytes[]
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(bFile);

            //save bytes[] into a file
            writeBytesToFile(bFile, UPLOAD_FOLDER + "test1.txt");
            writeBytesToFileClassic(bFile, UPLOAD_FOLDER + "test2.txt");
            writeBytesToFileNio(bFile, UPLOAD_FOLDER + "test3.txt");

            System.out.println("Done");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }

    //Classic, < JDK7
    private static void writeBytesToFileClassic(byte[] bFile, String fileDest) {

        FileOutputStream fileOuputStream = null;

        try {
            fileOuputStream = new FileOutputStream(fileDest);
            fileOuputStream.write(bFile);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileOuputStream != null) {
                try {
                    fileOuputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    //Since JDK 7 - try resources
    private static void writeBytesToFile(byte[] bFile, String fileDest) {

        try (FileOutputStream fileOuputStream = new FileOutputStream(fileDest)) {
            fileOuputStream.write(bFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //Since JDK 7, NIO
    private static void writeBytesToFileNio(byte[] bFile, String fileDest) {

        try {
            Path path = Paths.get(fileDest);
            Files.write(path, bFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,692評論 18 399
  • 今年一直有個心愿去寫寫久遠的過去,但腦海里似乎總有個聲音說我做不到,因為的確太久太久了,生怕自己什么也想不起來,從...
    王五月閱讀 429評論 0 1
  • 經(jīng)過一次有一次的摧殘和靈魂教育后,我們終于不再是整天冒泡的小年輕了, 十月的鄂北地區(qū)還依舊是那么燥熱,晴朗的天空沒...
    滄桑泯世閱讀 387評論 0 5
  • 最近幾天看了不少關于日本的文章和視頻,其中有10年前天之餃子赴日留學后進入日本大企業(yè)工作,成功躋身日本中產(chǎn)階級的勵...
    三苕閱讀 648評論 0 0

友情鏈接更多精彩內(nèi)容