`
MauerSu
  • 浏览: 490506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java io文件操作(多种读取方式-字节,字符,行,随机)

    博客分类:
  • IO
 
阅读更多
源:http://www.open-open.com/lib/view/open1356607724791.html
评:
一、多种方式读文件内容。

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
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.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile {
/**
   * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
   * @param fileName 文件的名
   */
public static void readFileByBytes(String fileName){
   File file = new File(fileName);
   InputStream in = null;
   try {
    System.out.println("以字节为单位读取文件内容,一次读一个字节:");
    // 一次读一个字节
    in = new FileInputStream(file);
    int tempbyte;
    while((tempbyte=in.read()) != -1){
     System.out.write(tempbyte);
    }
    in.close();
   } catch (IOException e) {
    e.printStackTrace();
    return;
   }
   try {
    System.out.println("以字节为单位读取文件内容,一次读多个字节:");
    //一次读多个字节
    byte[] tempbytes = new byte[100];
    int byteread = 0;
    in = new FileInputStream(fileName);
    ReadFromFile.showAvailableBytes(in);
    //读入多个字节到字节数组中,byteread为一次读入的字节数
    while ((byteread = in.read(tempbytes)) != -1){
     System.out.write(tempbytes, 0, byteread);
    }
   } catch (Exception e1) {
    e1.printStackTrace();
   } finally {
    if (in != null){
     try {
      in.close();
     } catch (IOException e1) {
     }
    }
   }
}
/**
   * 以字符为单位读取文件,常用于读文本,数字等类型的文件
   * @param fileName 文件名
   */
public static void readFileByChars(String fileName){
   File file = new File(fileName);
   Reader reader = null;
   try {
    System.out.println("以字符为单位读取文件内容,一次读一个字节:");
    // 一次读一个字符
    reader = new InputStreamReader(new FileInputStream(file));
    int tempchar;
    while ((tempchar = reader.read()) != -1){
     //对于windows下,/r/n这两个字符在一起时,表示一个换行。
     //但如果这两个字符分开显示时,会换两次行。
     //因此,屏蔽掉/r,或者屏蔽/n。否则,将会多出很多空行。
     if (((char)tempchar) != '/r'){
      System.out.print((char)tempchar);
     }
    }
    reader.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
   try {
    System.out.println("以字符为单位读取文件内容,一次读多个字节:");
    //一次读多个字符
    char[] tempchars = new char[30];
    int charread = 0;
    reader = new InputStreamReader(new FileInputStream(fileName));
    //读入多个字符到字符数组中,charread为一次读取字符数
    while ((charread = reader.read(tempchars))!=-1){
     //同样屏蔽掉/r不显示
     if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != '/r')){
      System.out.print(tempchars);
     }else{
      for (int i=0; i<charread; i++){
       if(tempchars[i] == '/r'){
        continue;
       }else{
        System.out.print(tempchars[i]);
       }
      }
     }
    }
  
   } catch (Exception e1) {
    e1.printStackTrace();
   }finally {
    if (reader != null){
     try {
      reader.close();
     } catch (IOException e1) {
     }
    }
   }
}
/**
   * 以行为单位读取文件,常用于读面向行的格式化文件
   * @param fileName 文件名
   */
public static void readFileByLines(String fileName){
   File file = new File(fileName);
   BufferedReader reader = null;
   try {
    System.out.println("以行为单位读取文件内容,一次读一整行:");
    reader = new BufferedReader(new FileReader(file));
    String tempString = null;
    int line = 1;
    //一次读入一行,直到读入null为文件结束
    while ((tempString = reader.readLine()) != null){
     //显示行号
     System.out.println("line " + line + ": " + tempString);
     line++;
    }
    reader.close();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (reader != null){
     try {
      reader.close();
     } catch (IOException e1) {
     }
    }
   }
}
/**
   * 随机读取文件内容
   * @param fileName 文件名
   */
public static void readFileByRandomAccess(String fileName){
   RandomAccessFile randomFile = null;
   try {
    System.out.println("随机读取一段文件内容:");
    // 打开一个随机访问文件流,按只读方式
    randomFile = new RandomAccessFile(fileName, "r");
    // 文件长度,字节数
    long fileLength = randomFile.length();
    // 读文件的起始位置
    int beginIndex = (fileLength > 4) ? 4 : 0;
    //将读文件的开始位置移到beginIndex位置。
    randomFile.seek(beginIndex);
    byte[] bytes = new byte[10];
    int byteread = 0;
    //一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
    //将一次读取的字节数赋给byteread
    while ((byteread = randomFile.read(bytes)) != -1){
     System.out.write(bytes, 0, byteread);
    }
   } catch (IOException e){
    e.printStackTrace();
   } finally {
    if (randomFile != null){
     try {
      randomFile.close();
     } catch (IOException e1) {
     }
    }
   }
}
/**
   * 显示输入流中还剩的字节数
   * @param in
   */
private static void showAvailableBytes(InputStream in){
   try {
    System.out.println("当前字节输入流中的字节数为:" + in.available());
   } catch (IOException e) {
    e.printStackTrace();
   }
}

public static void main(String[] args) {
   String fileName = "C:/temp/newTemp.txt";
   ReadFromFile.readFileByBytes(fileName);
   ReadFromFile.readFileByChars(fileName);
   ReadFromFile.readFileByLines(fileName);
   ReadFromFile.readFileByRandomAccess(fileName);
}
}
分享到:
评论

相关推荐

    Java文件处理工具类--FileUtil

    import java.io.*; /** * FileUtil. Simple file operation class. * * @author BeanSoft * */ public class FileUtil { /** * The buffer. */ protected static byte buf[] = new byte[1024]; /**...

    java IO流总结.md

    1.操作数据单位:字节流、字符流 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 3.流的角色:...

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    JavaIO实例,包括:字节流、字符流、缓冲流、转换流

    JAVA IO流文件读写大全下载

    JAVA IO流文件读写,字节流字符流的转换、读取、存盘,不乱码操作,文件移动读取操作,使用了多种流机制

    java 读取文件

    一、多种方式读文件内容。 1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 二、将内容追加到文件尾部

    Java流(文件读写操作)

    – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流:用于处理字节数据。 – 字符流:用于处理Unicode字符数据。 • ...

    JAVA IO流技术

    4. Java中流的概念细分 流的方向: 输入流:数据源到程序(InputStream、Reader读进来) ...节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对节点流 进行包装,提高性能或提高程序的灵活性。

    java文件操作.xmind

    里面包含了File类的作用、IO流、字节流字符流、异常处理、缓冲流、转换流、序列化、打印流的详细讲解

    java IO流学习笔记——(2)文件字符流&字节数组流

    java IO流学习笔记——(2)文件字符流&字节数组流 文件字符流FileReader&FileWriter FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 部分...

    java7源码-JavaIO:JavaIO

    Java也支持其他的字符如Unicode为了读取包含Unicode字符的文件,Java语言设计者在JDK1.1中引入了字符流。ACSII作为Unicode的子集,对于英文字符的文件,可以使用字节流也可以使用字符流。 3. Java中流类的超类主要是...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    Java字符流和字节流对文件操作的区别

    本篇文章主要介绍了Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,对初学者很有用,有需要的朋友可以了解一下。

    Java之IO流学习总结

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据...

    java 编写文件上传类简单易用

    本文将从文件传输的基本原理入手,分析如何用 java进行文件的上传,并提出解决方案。 一、基本原理 通过 HTML 上载文件的基本流程如下图所示。浏览器端提供了供用户选择提交内容的界面(通常是一个表单),在用户...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java基础 IO流

    此文档属于本人当初学习java基础之IO流,所整理的文档。里面有字节流与字符流的比较,也有总结使用不同方式读取文档的demo。希望对你的学习有帮助,谢谢!

    IO输入输出留

    保存文件 读取文件 java.io 包 java.io.File ============================================================================================ *表示磁盘文件或目录的路径 *可以表示一个不存在的路径 创建实例 ...

    java IO章节的总结

    以上能够直接对数据进行读和写的流叫节点流,但是直接用这些来操作是比较麻烦的,而且一个字节一个字节的对文件处理,对硬盘的读取和存入对硬盘的损伤是很大的,因此需要对这些节点流进行包装,即外套一些处理流来...

    Java中的IO流(二)字符流的常用操作

    字符流的分类①节点流②处理流③流的使用一般步骤④流的关闭字符流具体使用Ⅰ文件流①从文件中读取字符①将字符写入文件Ⅱ字符串流Ⅲ字符数组流Ⅳ缓冲流Ⅴ转换流Ⅵ字符打印流最后 前言 今天带来的是JAVA的IO流中的...

    Java IO读取文件的实例详解

    主要介绍了Java IO读取文件的实例详解的相关资料,主要介绍字符流和字节流的内容,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics