Java学些教程:【转载】IO流读取数据

    技术2022-07-10  130

    转载摘自速学堂 IO技术

    示例

    import java.io.*; public class TestIO2 { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("d:/a.txt"); // 内容是:abc StringBuilder sb = new StringBuilder(); int temp = 0; //当temp等于-1时,表示已经到了文件结尾,停止读取 while ((temp = fis.read()) != -1) { sb.append((char) temp); } System.out.println(sb); } catch (Exception e) { e.printStackTrace(); } finally { try { //这种写法,保证了即使遇到异常情况,也会关闭流对象。 if (fis != null) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } }

    结果

    部分流

    1. InputStream/OutputStream 字节流的抽象类。 2. Reader/Writer 字符流的抽象类。 3. FileInputStream/FileOutputStream 节点流:以字节为单位直接操作“文件”。 4. ByteArrayInputStream/ByteArrayOutputStream 节点流:以字节为单位直接操作“字节数组对象”。 5. ObjectInputStream/ObjectOutputStream 处理流:以字节为单位直接操作“对象”。 6. DataInputStream/DataOutputStream 处理流:以字节为单位直接操作“基本数据类型与字符串类型”。 7. FileReader/FileWriter 节点流:以字符为单位直接操作“文本文件”(注意:只能读写文本文件)。 8. BufferedReader/BufferedWriter 处理流:将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。 9. BufferedInputStream/BufferedOutputStream 处理流:将InputStream/OutputStream对象进行包装,增加缓存功能,提高 读写效率。 10. InputStreamReader/OutputStreamWriter 处理流:将字节流对象转化成字符流对象。 11. PrintStream 处理流:将OutputStream进行包装,可以方便地输出字符,更加灵活。

    字符流和字节流

    字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。

    1、字节流FileInputStream与 FileOutputStream
    import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutputStream { public static void main(String[] args) { FileOutputStream fos = null; String string = "北京尚学堂欢迎您!"; try { // true表示内容会追加到文件末尾;false表示重写整个文件内容。 fos = new FileOutputStream("d:/a.txt", true); //该方法是直接将一个字节数组写入文件中; 而write(int n)是写入一个字节 fos.write(string.getBytes()); } catch (Exception e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
    2、字符流FileReader与FileWriter
    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestFileCopy2 { public static void main(String[] args) { // 写法和使用Stream基本一样。只不过,读取时是读取的字符。 FileReader fr = null; FileWriter fw = null; int len = 0; try { fr = new FileReader("d:/a.txt"); fw = new FileWriter("d:/d.txt"); //为了提高效率,创建缓冲用的字符数组 char[] buffer = new char[1024]; //边读边写 while ((len = fr.read(buffer)) != -1) { fw.write(buffer, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fw != null) { fw.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (fr != null) { fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } }

    3、缓冲字节流BufferedInputStream和BufferedOutputStream
    4、缓冲字符流BufferedReader和BufferedWriter
    5、字节数组流ByteArrayInputStream和ByteArrayOutputStream

    经常用在需要流和数组之间转化

    6、数据流DataInputStream和DataOutputStream

    提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法

    7、对象流ObjectInputStream/ObjectOutputStream

    以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。 把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。 (1)ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。 (2)ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

    8、转换流InputStreamReader/OutputStreamWriter

    用来实现将字节流转化成字符流。

    Processed: 0.012, SQL: 9