java语言基础--IO流
IO流的分类:

使用FileInputStream和FileOutputStream 读取和写入
- 相对路径:在硬盘上真是存在的路径;相对java文件的路径
- 绝对路径:相对于别的文件的路径。
FileInputStream
- 就是将硬盘上的内容读取到内存中
读取文件:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileInputStreamTest { public static void main(String[] args) throws IOException { FileInputStream fis = null; try {
//绝对路径 fis = new FileInputStream("E:\\windowapp\\javaworkspace\\day08\\dss");
// //Resource leak: 'fis' is never closed需要关闭 // //打印内容的码值 // System.out.println(fis.read()); // System.out.println(fis.read()); // System.out.println(fis.read()); // //读取完毕之后返回-1; // System.out.println(fis.read());
// 使用循环读取; // int temp; // while ((temp = fis.read()) != -1) { // char c= (char)temp; // System.out.println(c); // } // 利用数组 每次读取2个字符 减少了内存和硬盘的联系次数,提高了效率 byte[] arr = new byte[2]; int temp; // 有参的方法的读取返回的是读取的字节数 while ((temp = fis.read(arr)) != -1) { System.out.println(new String(arr, 0, temp)); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { fis.close(); } } }
相对路径的话,就是系统会默认的以java文件的根路径即项目包为相对的来。

即以day08为比较的相对路径
还是上面的例子,我们以相对路径来读取文件:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileInputStreamTest { public static void main(String[] args) throws IOException { FileInputStream fis = null; try { fis = new FileInputStream("dss"); // 利用数组 每次读取2个字符 byte[] arr = new byte[2]; int temp; // 有参的方法的读取返回的是读取的字节数 while ((temp = fis.read(arr)) != -1) { System.out.println(new String(arr, 0, temp)); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { fis.close(); } } }
这样同样也可以读取到文件里面的内容。
向文件写内容:
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamTest { public static void main(String[] args) { FileOutputStream fos = null; try { //若该文件不存在,则会创建一个 //传入true会在原来的基础上接着写,不加true的话,会代替原来的内容 //File.separator可以作为所有系统的分割符 fos = new FileOutputStream("dss",true); String msg ="hello world"; fos.write("\n".getBytes()); fos.write(msg.getBytes()); fos.write("\n".getBytes()); fos.write("java".getBytes()); //刷新,保证内容全部写入硬盘文件 fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
拷贝文件:

将dss文件拷贝到file文件夹下面;
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileCopyTest { public static void main(String[] args) { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("dss"); fos = new FileOutputStream("file" + File.separator + "good"); byte[] arr = new byte[3]; int temp; while((temp=fis.read(arr))!=-1) { fos.write(arr, 0, temp); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
利用缓冲流拷贝文件:

利用缓冲流将dss复制到file文件夹中;
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class BufferFileCopy { public static void main(String[] args) { BufferedInputStream bis =null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(new FileInputStream("dss")); bos = new BufferedOutputStream(new FileOutputStream("file" +File.separator+"good")); int temp ; while((temp=bis.read())!= -1) { bos.write(temp); } } catch (IOException e) { e.printStackTrace(); } } }
缓冲流不用再定义一个数组,原因是在底层,BufferInputStream这个类已经给创建了一个长度为8192的byte数组;


浙公网安备 33010602011771号