节点流(文件流)
FileInputStream(字节流)处理视频类的
FileOutputStream(字节流)
FileReader(字符流)处理文本文件
FileWriter(字符流)
TestFileInputOutStream
package com.aff.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.print.DocFlavor.STRING; import org.junit.Test; //节点流(文件流) // FileInputStream(字节流)处理视频类的 // FileOutputStream(字节流) // // FileReader(字符流)处理文本文件 // FileWriter(字符流) public class TestFileInputOutStream { //FileInputStream //从硬盘存在的文件中,读取其内容到程序中 //要读取的文件一定要存在,否则抛出FileNotFoundException @Test public void testFileInputStream() throws IOException { // 1.创建一个File类的对象 File file = new File("heel.txt");//指明要读入文件的路径 // 2.创建一个FileInputStream类的对象 FileInputStream fis = new FileInputStream(file); // 3.调用FileInputStream的方法,实现file文件的读取 /* * read(): 读取文件的一个字节每执行到文件结尾时, 返回-1 */ // int b = fis.read(); // while (b != -1) { // System.out.println((char)b); // b = fis.read(); // } int b ; while((b = fis.read())!=-1){ System.out.println((char)b); } // 4.关闭相应的流 fis.close(); } // 改进, 使用try-catch处理,保证流的关闭操作一定可以执行 @Test public void testFileInputStream1() { FileInputStream fis = null; try { // 1.创建一个File类的对象 File file = new File("heel.txt");//指明要读入文件的路径 // 2.创建一个FileInputStream类的对象 fis = new FileInputStream(file); // 3.调用FileInputStream的方法,实现file文件的读取 int b ; while((b = fis.read())!=-1){ System.out.println((char)b); } } catch (Exception e) { e.printStackTrace(); }finally { // 4.关闭相应的流 if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } //再改进, 使用使用数组读取,更加快 @Test public void testFileInputStream2() { FileInputStream fis = null; try { File file = new File("heel.txt"); fis = new FileInputStream(file); //使用数组 byte [] b = new byte[5];//读取到的数据写入数组 int len ;//每次读入到byte中的字节的长度 while((len = fis.read(b))!=-1){ // for(int i = 0;i<len;i++){ // System.out.println((char)b[i]); // } String str = new String(b,0,len);//读入数组b中,从0开始,每次读入的长度 System.out.print(str); } } catch (Exception e) { e.printStackTrace(); }finally { if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } //FileOutputStream @Test public void testFileOutputStream(){ FileOutputStream fos = null; try { //创建一个File类的对象。表名要写入的文件位置 //输出的物理文件可以不存在,当执行过程中,若不存在,会自动创建。若存在会将原来的文件覆盖。 File file = new File("aff"); //创建一个FileOutputStream类的对象,将file类的对象作为形参传递给FileOutputStream的构造器中 fos = new FileOutputStream(file); //写入操作 fos.write(new String("i love fangfang").getBytes());//将字符串转为字节数组 }catch (IOException e) { e.printStackTrace(); }finally { //关闭输出流 if(fos != null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } //testFileInputOutStream, 实现文件复制 @Test public void testFileInputOutStream(){ //从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制) File file1 = new File("aff.txt"); File file2 = new File("aff2.txt"); FileInputStream fis = null; FileOutputStream fos = null; //提供相应的流 try { fis = new FileInputStream(file1); fos = new FileOutputStream(file2); //实现文件的复制 byte[] b = new byte[20]; int len; while((len = fis.read(b)) != -1){ fos.write(b, 0, len); } }catch (IOException e) { e.printStackTrace(); }finally { if(fos != null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 实现文件复制的方法 public void copyFile(String src,String dest){ File file1 = new File(src); File file2 = new File(dest); FileInputStream fis = null; FileOutputStream fos = null; //提供相应的流 try { fis = new FileInputStream(file1); fos = new FileOutputStream(file2); //实现文件的复制 byte[] b = new byte[20]; int len; while((len = fis.read(b)) != -1){ fos.write(b, 0, len); } }catch (IOException e) { e.printStackTrace(); }finally { if(fos != null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } @Test public void testCopyFile(){ long start = System.currentTimeMillis(); String src = "C:\Users\lz\Desktop\1.avi"; String dest = "C:\Users\lz\Desktop\2.avi"; copyFile(src,dest); long end = System.currentTimeMillis(); System.out.println("花费的时间:"+(end-start));//21MB 4968 } }
TestFileReaderWriter:
package com.aff.file; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.junit.Test; public class TestFileReaderWriter { // FileReader @Test public void testFileReader() { FileReader fr = null; try { File file = new File("license.txt"); fr = new FileReader(file); char[] c = new char[30]; int len; while ((len = fr.read(c)) != -1) { String str = new String(c, 0, len); System.out.println(str); } } catch (IOException e) { e.printStackTrace(); } finally { if (fr != null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 使用FileReader FileWriter ,实现文本文件的复制 // 对于非文本文件(视频,图片,音乐等)只能使用字节流 @Test public void testFileReaderWriter() { // 1.输入流对应的文件src一定要存在,输出流对应的dest可以不存在,执行过程中会自动创建 FileReader fr = null; FileWriter fw = null; try { File src = new File("license.txt"); File dest = new File("license1.txt"); fr = new FileReader(src); fw = new FileWriter(dest); char[] c = new char[30]; int len; while ((len = fr.read(c)) != -1) { fw.write(c, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { if (fr != null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
复制结果: