标签:
此抽象类是表示字节输入流的所有类的超类。
需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。
注意红色部分
举个例子:
package com.study2; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class Input { public static void main(String[] args) { // Input.cannotReadChinese(); //无法读取中文 Input.canReadChinese(); // 字节流的形式读取中文字符,不推荐 } /** * 字节流的形式读取中文字符,不推荐 */ private static void canReadChinese() { File file = new File("C:\\Users\\hlwyf_000\\Desktop\\test.txt"); InputStream inputstream = null; try { inputstream = new FileInputStream(file); try { byte[] b = new byte[50]; // 定义一个缓冲数组 int i = 0; inputstream.available(); int temp = inputstream.available(); while ((i = inputstream.read(b, 0, b.length)) != -1) { // 输出整个缓冲数组 //如果使用下面的这种String方法,将定性输出50个字节,可能出现乱码 System.out.print(new String(b, 0 , i));//查看文档,String的一个构造函数 } System.out.println(inputstream.available()); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (inputstream != null) { try { inputstream.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void cannotReadChinese() { // 读不出来的原因,因为一个中文字符占两个字节,所以有中文的话,最好用字符流读出来 // 但是字节流也是可以读的,需要换一些方式来读取 File file = new File("C:\\Users\\hlwyf_000\\Desktop\\test.txt"); InputStream inputstream = null; try { inputstream = new FileInputStream(file); try { inputstream.available(); int temp = inputstream.available(); for (int i = 0; i < temp; i++) { System.out.print((char) inputstream.read()); } System.out.println(inputstream.available()); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (inputstream != null) { try { inputstream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
OutputStream
package com.study3; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class TestOutputStream { public static void main(String[] args) { TestOutputStream.fileoutput(); } private static void fileoutput() { File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt"); OutputStream output = null; try { output = new FileOutputStream(file);// FileOutputStream是OutputStream的一个子类 try { output.write(‘H‘); output.write(‘e‘); output.write("你好啊!".getBytes());//write(byte[]); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
文件复制:
package com.study4; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Testone { public static void main(String[] args) { Testone.copyFile("C:\\Users\\hlwyf_000\\Desktop\\软件工程2-7.需求工程.ppt", "E:\\Java学习\\java\\第11章 文件 I O 编程\\abc.ppt"); } public static void copyFile(String str, String dest){ InputStream inputstream = null; OutputStream outputstream = null; try{ inputstream = new FileInputStream(str); //注意此处要传入文件,写在括号里面 outputstream = new FileOutputStream(dest); int i = 0; byte[] b = new byte[10240];//以10K为单位进行传输 /** * read()返回读入缓冲区的总字节数,用i来获取,所以下面的outputstream最后一个参数用i */ while ((i = inputstream.read(b, 0, b.length)) != -1){ outputstream.write(b, 0, i);//写入目标文件 outputstream.flush();//刷新 } }catch(Exception e){ e.printStackTrace(); }finally{ if(inputstream != null){ try { inputstream.close(); } catch (IOException e) { e.printStackTrace(); } } if(outputstream != null){ try { outputstream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
复制完成后,格式什么的都不变,一模一样复制!
文件剪切,删除复制后原来的文件即可!
DataInputStream 和 DataOutputStream 的使用
package com.study4; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TestTwo { public static void main(String[] args) { TestTwo.datainput(); //写入 TestTwo.dataoutput();//读出 } private static void dataoutput() { File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt"); InputStream inputstream = null; //建立一个抽象类对象,赋值为空 DataInputStream datainputstream = null; //建立一个对象,对象为空 try { inputstream = new FileInputStream(file); //重点 datainputstream = new DataInputStream(inputstream); //重点 int i = datainputstream.readInt(); char a = datainputstream.readChar(); boolean flag = datainputstream.readBoolean(); double d = datainputstream.readDouble(); String s = datainputstream.readUTF(); System.out.println(i); System.out.println(a); System.out.println(flag); System.out.println(d); System.out.println(s); } catch (Exception e) { e.printStackTrace(); } finally { if (datainputstream != null) { try { datainputstream.close(); } catch (IOException e) { e.printStackTrace(); } } if (datainputstream != null) { try { datainputstream.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void datainput() { File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt"); OutputStream outputStream = null; DataOutputStream dataOutputStream = null; try { outputStream = new FileOutputStream(file); // 注意,OutputStream是一个抽象类 dataOutputStream = new DataOutputStream(outputStream); // 参见文档 int i = 12; char a = ‘他‘; boolean flag = false; double d = 12.3456; String str = "这是一个字符串"; dataOutputStream.writeInt(i); dataOutputStream.writeChar(a); dataOutputStream.writeBoolean(flag); dataOutputStream.writeDouble(d); dataOutputStream.writeUTF(str); } catch (Exception e) { e.printStackTrace(); } finally { if (dataOutputStream != null) { try { dataOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
字符流
字符流的作用_读取字符
字符流与字节流的使用场合
字节流读写二进制文件。
字符流读写文本文件。
Reader的体系结构
Writer体系结构
使用方法和字节流基本一致。
标签:
原文地址:http://www.cnblogs.com/hlwyfeng/p/4427562.html