使用Inputstream读取文件

在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:

1.如何建立合适大小的byte数组,如果已知输入流的大小。

2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?

先看第一个问题:解决之道就是获取输入流的大小,创建此大小的byte数组。代码如下:view plaincopy to clipboardprint?
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组   
import java.io.File;   
import java.io.InputStream;   
import java.io.FileInputStream;   
public class InputStreamDemo01   
{   
    public static void main(String args[])throws Exception{   
        File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
        InputStream in = new FileInputStream(f);   
        byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组   
        in.read(b);    //读取文件中的内容到b[]数组   
        in.close();   
        System.out.println(new String(b));   
    }   
}  
//使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo01
{
 public static void main(String args[])throws Exception{
  File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
  InputStream in = new FileInputStream(f);
  byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组
  in.read(b);    //读取文件中的内容到b[]数组
  in.close();
  System.out.println(new String(b));
 }
}

第二个问题:问题的解决之道就是获得输入流何时结束,它在byte中的尾索引位置。可以通过read()方法实现,read()返回读取的字节内容,当内容为空时返回-1。利用此特征可以解决第二个问题。代码如下:

view plaincopy to clipboardprint?
//同过判断文件的结尾来读取文件   
import java.io.File;   
import java.io.InputStream;   
import java.io.FileInputStream;   
public class InputStreamDemo02   
{   
    public static void main(String args[]) throws Exception{   
        File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
        InputStream in = new FileInputStream(f);   
        byte b[] = new byte[1024];   
        int len = 0;   
        int temp=0;          //所有读取的内容都使用temp接收   
        while((temp=in.read())!=-1){    //当没有读取完时,继续读取   
            b[len]=(byte)temp;   
            len++;   
        }   
        in.close();   
        System.out.println(new String(b,0,len));   
    }   
}

时间: 2024-10-06 10:35:04

使用Inputstream读取文件的相关文章

InputStream读取文件到string后OutputStream到文件,按String和Bytes拷贝

http://www.iteye.com/problems/72150 写了一段代码 大体是 InputStream读取文件到string后OutputStream到文件 遇到的问题为TXT文件大小格式等都没有问题,但是PDF\RAR等格式的就无法打开了,重新生成的文件大小会比原文件小,代码如下. package com.stream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java

android 从assets和res中读取文件(转)

1. 相关文件夹介绍 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件.在后面会介绍如何读取assets文件夹的资源! res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容): 目录Directory 资源类型Resource Types res/anim/ XML文件,它们被编译进逐帧动画

android 从assets和res中读取文件

11. assets文件夹资源的访问 assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件. 1. 先在Activity里面调用getAssets()来获取AssetManager引用. 2. 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream. 3. 然后就是用已经open file 的inputStream读取文件,读取

asp.net 上传XML,txt 直接读取文件内容

if (GetUploadFileContent.PostedFile.InputStream.Length < 1) { Msg.Text = "请选择文件";return; } string FileName = GetUploadFileContent.FileName;//上传文件文件名 string FilePath = GetUploadFileContent.PostedFile.FileName;//上传文件完整路径+文件名string fileExtName =

读取文件方法大全

原文链接:[Java]读取文件方法大全 - lovebread - 博客园 http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.     */    public static voi

JAVA多种方式读取文件

package com.file; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public c

Java 读取文件的几种方法

1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 5.将内容追加到文件尾部 /*** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.*/ public class ReadFromFile { public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.o

文件_ _android从资源文件中读取文件流并显示的方法

======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private void doRaw(){ InputStream is = this.getResources().openRawResource(R.raw.ziliao); try{ doRead(is); }catch(IOException e){ e.printStackTrace(); } } pri

HDFS读文件过程分析:读取文件的Block数据

转自http://shiyanjun.cn/archives/962.html 我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStream实例中的字节,每次调用read方法,会读取一个字节数据,该方法抽象定义,如下所示:public abstract int read() throws IOException;Hadoop的DFSClient.DFSInputStream类实现了该抽象逻辑,如果我们清楚了如何从HDFS中读取一个文件