Java读取文件到字节数组的几种方法

Posted zhenjie_chang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java读取文件到字节数组的几种方法相关的知识,希望对你有一定的参考价值。

    package zs;  
      
    import java.io.BufferedInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileNotFoundException;  
    import java.io.IOException;  
    import java.io.RandomAccessFile;  
    import java.nio.ByteBuffer;  
    import java.nio.MappedByteBuffer;  
    import java.nio.channels.FileChannel;  
    import java.nio.channels.FileChannel.MapMode;  
      
    public class FileUtils   
        public byte[] getContent(String filePath) throws IOException   
            File file = new File(filePath);  
            long fileSize = file.length();  
            if (fileSize > Integer.MAX_VALUE)   
                System.out.println("file too big...");  
                return null;  
              
            FileInputStream fi = new FileInputStream(file);  
            byte[] buffer = new byte[(int) fileSize];  
            int offset = 0;  
            int numRead = 0;  
            while (offset < buffer.length  
            && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0)   
                offset += numRead;  
              
            // 确保所有数据均被读取  
            if (offset != buffer.length)   
            throw new IOException("Could not completely read file "  
                        + file.getName());  
              
            fi.close();  
            return buffer;  
          
      
        /** 
         * the traditional io way 
         *  
         * @param filename 
         * @return 
         * @throws IOException 
         */  
        public static byte[] toByteArray(String filename) throws IOException   
      
            File f = new File(filename);  
            if (!f.exists())   
                throw new FileNotFoundException(filename);  
              
      
            ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());  
            BufferedInputStream in = null;  
            try   
                in = new BufferedInputStream(new FileInputStream(f));  
                int buf_size = 1024;  
                byte[] buffer = new byte[buf_size];  
                int len = 0;  
                while (-1 != (len = in.read(buffer, 0, buf_size)))   
                    bos.write(buffer, 0, len);  
                  
                return bos.toByteArray();  
             catch (IOException e)   
                e.printStackTrace();  
                throw e;  
             finally   
                try   
                    in.close();  
                 catch (IOException e)   
                    e.printStackTrace();  
                  
                bos.close();  
              
          
      
        /** 
         * NIO way 
         *  
         * @param filename 
         * @return 
         * @throws IOException 
         */  
        public static byte[] toByteArray2(String filename) throws IOException   
      
            File f = new File(filename);  
            if (!f.exists())   
                throw new FileNotFoundException(filename);  
              
      
            FileChannel channel = null;  
            FileInputStream fs = null;  
            try   
                fs = new FileInputStream(f);  
                channel = fs.getChannel();  
                ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size());  
                while ((channel.read(byteBuffer)) > 0)   
                    // do nothing  
                    // System.out.println("reading");  
                  
                return byteBuffer.array();  
             catch (IOException e)   
                e.printStackTrace();  
                throw e;  
             finally   
                try   
                    channel.close();  
                 catch (IOException e)   
                    e.printStackTrace();  
                  
                try   
                    fs.close();  
                 catch (IOException e)   
                    e.printStackTrace();  
                  
              
          
      
        /** 
         * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能 
         *  
         * @param filename 
         * @return 
         * @throws IOException 
         */  
        public static byte[] toByteArray3(String filename) throws IOException   
      
            FileChannel fc = null;  
            try   
                fc = new RandomAccessFile(filename, "r").getChannel();  
                MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,  
                        fc.size()).load();  
                System.out.println(byteBuffer.isLoaded());  
                byte[] result = new byte[(int) fc.size()];  
                if (byteBuffer.remaining() > 0)   
                    // System.out.println("remain");  
                    byteBuffer.get(result, 0, byteBuffer.remaining());  
                  
                return result;  
             catch (IOException e)   
                e.printStackTrace();  
                throw e;  
             finally   
                try   
                    fc.close();  
                 catch (IOException e)   
                    e.printStackTrace();  
                  
              
          
      

以上是关于Java读取文件到字节数组的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

B.php中读取文件内容的几种方法

java读取配置文件的几种方法

读取配置文件的几种方法

Java读取配置文件的几种方法

java读取properties文件的几种方法

java读取大文件 超大文件的几种方法