1.字节输入流:InputStream
- 字节输入流的作用是从数据输入源(例如磁盘、网络等)获取字节数据到应用程序(内存)中;
- read 方法,每次可以读取一个字节的数据,提升为 int 类型,读取到文件末尾,返回 -1;
// 1.创建一个字节输入流对象代表字节输入流管道与源文件接通 InputStream is = new FileInputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt"); // 2.开始读取文件中的字节数据,每次读取多个字节 byte[]buffer1=new byte[5]; int len1= is.read(buffer1); String rs1= new String(buffer1); System.out.println(rs1); byte[] buffer = new byte[3]; int len; // 记住每次读取了多少个字幕 while ((len = is.read(buffer)) != -1){ // 注意 :读取多少,倒出多少 String rs=new String(buffer,0,len);// 读取字节数组,从0到len System.out.print(rs); } // 性能得到了明显的提升 // 这种方案也不能避免读取汉字输出乱码的问题 is.close();// 关闭流
2.字节输出流:OutputStream
- 字节输出流的作用是将字节数据从应用程序(内存)中传送到输出目标,如外部设备、 网络等;
/* FileOutputStream (文件字节输出流) * 作用: 以内存为基准,把内存中的数据以字节的形式写到文件中去 */ // 创建一个字节输出流管道与目标文件接通 // 覆盖管道 // OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt"); OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt",true); // 2.开始写字节数据出去了 os.write(97);// 接一个字节 os.write('b'); // b 98 // os.write('美');// [ooo] 默认只能写出去一个字节 os.write("我爱你".getBytes()); byte[]bytes="我爱你".getBytes(); os.write(bytes,0,6); // 一个汉字三个字节 // 换行 os.write("\r\n".getBytes());// \n只在Windows系统 \r\n支持所有的 os.close(); // 关闭流
3.字符输入流 FileReader
public class FileReaderTest1 { public static void main(String[] args) throws Exception { try ( // 1.创建一个文件字符流输出管道与源文件接通 Reader fr=new FileReader("file-io--app\\src\\world")) { // 2.读取文本文件中的内容 // int c; // * 记住每次读取的字符编号 // while ((c= fr.read())!=-1){ // System.out.print((char) c); // } // 3.每次读取多个字符 char[]buffer=new char[3]; int len;//记住读取到的字符数 while ((len= fr.read(buffer))!=-1) { System.out.print(new String(buffer, 0, len)); } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
4.字符输出流 FileWriter
public class FileWriterTest1 { public static void main(String[] args) throws IOException { // 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效 // 创建一个文件字符输出流管道 try(Writer fw= new FileWriter("file-io--app\\src\\world")) { // 输出字符流 // 1.写一个字符 fw.write('a'); fw.write('w'); fw.write('哈'); // 2.写一个字符串 fw.write("我爱你"); fw.write("\r\n"); // 3.写字符串中的一部分进去 fw.write("我爱你中国",1,3); fw.write("\r\n"); // 4. 写一个字符数组出去 char[]buffer={'李','我','爱'}; fw.write(buffer); fw.write("\r\n"); // 5. 写一个字符数组中的一部分出去 fw.write(buffer,0,1); fw.flush(); // fw.close 关闭流,包括刷新流,但是关闭流之后,就不可以再加入数据 } catch (IOException e) { e.printStackTrace(); } } }