IO流基础加强

字节流对象:InputStream,OutputStream

缓冲字节流对象:BufferedInputStream , BufferedOutputStream

用法和字符流对象一样,但也有区别,

输出流用法:

  1.创建字节输出流对象,用于操作文件

  FileOutputStream fps = new FileOutputStream("1.txt");

    fin.available();//读取出要读的文件的大小

2.写数据,直接写入到目的地中

  fps.write("ashdgas".getBytes());

3.关闭资源

fps.close();

输入流用法:

//创建字节流输入对象,用于操作文件

FileInputStream fin = new FileInputStream("ArrayListTest.java");

int ch = 0;

byte[] ch1 = new byte[1024];

while((ch = fin.read(ch1)) != -1){

System.out.print(new String(ch1,0,ch));

}

fin.close();

缓冲对象的用法:

public static void main(String[] args) throws IOException {

//创建字符流输入输出对象,关联文件

FileInputStream fin = new FileInputStream("1.mp3");

FileOutputStream fop = new FileOutputStream("2.mp3");

//创建缓冲对象

BufferedInputStream bui = new BufferedInputStream(fin);

BufferedOutputStream bos = new BufferedOutputStream(fop);

byte [] bt = new byte[1024];

int len = 0;

while((len = bui.read(bt)) != -1){

bos.write(bt, 0, len);

bos.flush();

}

bui.close();  //关闭资源

bos.close();

}

接收键盘录入的数据的几种方法:

  //第一种

private static void SystemOutDemo() throws IOException {

 //获取系统的输入流对象

InputStream in = System.in;

//获取系统的输出流对象

OutputStream os = System.out;

int ch = 0;

while((ch = in.read()) != -1){

  os.write((char)ch);

}

}

  //第二种

private static void SysteminDemo() throws IOException {

//获取系统的输入流对象

InputStream in = System.in;

int ch = 0;

while((ch = in.read()) != -1){  //输出输入流读取到从键盘上接受的数据

   System.out.print((char)ch);

}

}

  //第三种

private static void ScannerDemo() {

//Scanner里面封装的就是InputStream对象

Scanner sc = new Scanner(System.in);

String str = sc.nextLine();

System.out.println(str);

}

字节流和字符流的相互转换:使用字符流Reader类的子类InputStreamReader可以将字节流转换为字符流,使用Writer类的子类OutputStreamWriter可以将字符流转换成为字节流。

转换流最大的好处就是可以融入编码操作

当:

  1. 源或者目的的对应设备是字节流,但操作的是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷
  2. 一旦操作文本涉及到具体的指定的编码表时必须使用转换流

例如:

    //BufferedReader字符流缓冲区,InputStreamReader将字节流转换为字符流//System.in获取系统的字节输入流对象

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//BufferedWriter字符流缓冲区,OutputStreamWriter将字符流转换为字节流//System.in获取系统的字节输出流对象

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

String lin=null;

while((lin = br.readLine()) != null){

  if(lin.equals("over"))

  break;

  bw.write(lin.toUpperCase());

  //换行

  bw.newLine();

  //刷新

   bw.flush();

  }

  //使用系统的输入输出流对像,不用执行关流动作

}

流的操作规律:什么时候需要用到哪些对象,需要明确一下几点

  1. 明确源和目的

        源:InputStream  Reader

  目的: OutputStream  Writer

  2.明确数据是否是纯文本数据

    源:如果是纯文本数据:Reader,不是纯文本数据用InputSteram

    目的:如果是纯文本数据:Writer,不是纯文本数据用OutputStream

  3.明确具体的设备。

    源设备:

    硬盘:File

    键盘:System.in

       内存:数组

       网络:Socket流

  目的设备:硬盘: file

  控制台: System.out

     内存:数组

    网络:Socket流

  1. 是否需要其他额外功能。

    1. 是否需要缓冲区,是的话就用Buffer
    2. 是否需要使用到转换流

File文件类:

File类可以将文件和文件夹封装成对象

    //可以将一个已存在或者不存在的文件封装成一个File对象

File fl = new File("1.txt");

   //File.separatorChar用来获取系统平台的路径分隔符

File fl1 = new File("f:"+File.separatorChar+"1.txt");

File类对象的常用方法:

  File fl = new File("1.txt");

    1.获取

       //获取文件名称

    String name = fl.getName();

     //获取文件绝对路径

    String path = fl.getAbsolutePath();

    //获取文件相对路径(就是构造器中写的文件的路径)

    String path1=fl.getPath();

    //获取文件的大小

    long len = fl.length();

    //获取文件的最后修改时间

      long time = fl.lastModified();

      . . . . . . ..

    2.创建和删除:

     File fl = new File("f:/a.txt");

    //创建一个文件,当这个文件存在的时候创建失败,返回false

    boolean flag = fl.createNewFile();

    //删除这个文件

    boolean flag1 = fl.delete();

    //当虚拟机退出时删掉这个文件

       fl.deleteOnExit();

  创建删除文件夹:

      File fl = new File("abc");

  //创建一个文件夹,fl.mkdirs();是创建多级目录

  boolean b = fl.mkdir();

   System.out.println(b);

  //删除一个文件夹,如果里面有内容,就会删除失败

    boolean a = fl.delete();

    File fl = new File("f:/1.txt");

   //判断文件是否存在

   boolean b = fl.exists();

//判断是否是文件,应该先判断这个文件是否存在

   boolean c = fl.isFile();

   //判断是否是目录

    boolean d = fl.isDirectory();

  4.重命名:

    //如果两个文件的目录一样就是将重命名,否则就是将f1剪切到f2并重命名

fl.renameTo(f2);

-------------------------- ----------------------------------------

//获取系统驱动器的根目录,返回File数组

File [] fl = File.listRoots();

Map map = new HashMap<File,String>();

/*for (File file : fl) {

System.out.println(file);

map.put(file,file.get)

}*/

//得到驱动器的总的空间

System.out.println(fl[1].getTotalSpace());

//得到可用空间

System.out.println(fl[1].getFreeSpace());

System.out.println(fl[1].getUsableSpace());

访问目录下的文件和文件夹:

 File fl = new File("c:\\");

//获取当前目录下的问价和文件夹的名称,

//调用list方法的File对象中封装的必须是目录,

//否则会发生空指针异常

//如果访问的是系统级保护目录也会发生空指针异常

//如果目录存在,但是没有内容,会返回一个数组,但是长度为零。

String [] name = fl.list();

for (String string : name) {

System.out.println(string);

}

查看目录下是否有指定后缀名的文件:使用文件过滤器

  过滤器:public class FilenameFilterDemo1 implements FilenameFilter {

    private String filename;

    //构造函数,接收一个文件

    public FilenameFilterDemo1(String filename) {

      super();

      this.filename = filename;

    }

    public boolean accept(File dir, String name) {

  //比较文件是否是以指定后缀名结尾

    return name.endsWith(filename);

  }

  }. . . .

  File fl = new File("f:\\test\\day13\\");

//传入一个文件过滤器

 String [] name = fl.list(new FilenameFilterDemo1(".class"));

for (String string : name) {

System.out.println(string);//输出的是指定后缀名的文件名称

}

时间: 2024-10-21 22:03:23

IO流基础加强的相关文章

java的io流基础篇乱码的原因

1.编码的产生:我们的存储的基本单元是一个byte字节,然而人类的语言太多,无法用一个基本单元来表示,然而为了拆分或者一些相应的翻译工作,导致了编码的产生 2.常见的编码格式 ASCll :用一个字节的低7位共128个来表示,0-31表示控制字符,32-126表示打印字符, ASCll的二进制第一位也就是最高位,目的是用来做奇偶检验的,所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种.奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高

Java IO流基础总结

前言 好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了.那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下. IO流类图结构 对于Java这种庞大的体系,我们要学某一块知识点,只有从整体上把握,整体上形成一个知识架构,这样才能更好的把握学习内容和学习方向.所以呢,和别的博文一样,上来就先来一张别的博客贴来的类结构图. 大家先不要被这张图中那么多的类所迷惑了:其实,从这张图来看,结构还是非常清晰的,也是非常简单的

乐字节Java之file、IO流基础知识和操作步骤

嗨喽,小乐又来了,今天要给大家送上的技术文章是Java重点知识-IO流. 先来看看IO流的思维导图吧. 一. File 在Java中,Everything is Object!所以在文件中,也不例外!在Java中,可以用 File类来表示一个与硬盘上文件联系!!!注意: 1.File仅代表一个联系,可能文件存在,也可能不存在: 2.这里的文件可以是文件,也可以是文件夹: 在常用类中已经详细讲过File,此处不在讲解 二. IO流 1.流概念 流即流动.流向,从一端流向另一端.如水流:从山里流向到

IO流基础

IO流,也称为数据流,用于处理设备之间的数据传输. JAVA对数据的操作就是通过流的方式,而流分为两种:字符流,字节流 字符流: 可以内部制定码表,处理文字很方便,字符流里的基类是Reader,Writer 字节流: 操作字节数据.和字符流差不多,基类是InputSteram,OutputStream,如果不使用缓冲区,不需要flush()方法,查看父类方法,使用子类建立对象. IO包中子类名称后缀就分明了字节流和字符流,前缀说明了功能,缓冲区的出现是为了提高流的效率,在创建缓冲区之前要先有流对

Java之IO流基础流对象

输入流和输出流是相对于内存设备而言 即将外设中的数据读取到内存中就是输入 将内存中的数据写入到外设中就是输出 字符流的由来: 其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字. 再对这个文字进行操作,其实就是字节流+编码表 字节流的两个顶层父类: 1,InputStream  2,OutputStream 字符流的两个顶层父类: 1,Reader   2,Writer 这些体系的子类都以父类名作为后缀. 而子类名的前缀就是该对象的功能. 如果要操作文字数据,建议

IO流基础——笔记

流可以理解为管道,数据通过流实现传递. 根据操作的类型可以分为输入流和输出流,I/O(Input,Output). 按照输出的方式可以分为字节流和字符流. 字节流:一次传输一个字节,适合于图片,音乐,视频的传输,防止失真.传汉字会乱码,汉字为字符. InputStream类是字节流的抽象类,是所有字节输出流的父类,因为抽象类不能被new ,所以只能使用他的子类,常用的子类有: 字节流: BufferedInputStream     缓冲输入流BufferedOutputStream   缓冲输

Java中的IO流之输入流|乐字节

亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入流 字节流和字符流的操作方式几乎完全一样,只是操作的数据单元不同而已 .字节流可 以操作所有文件,字符流仅操作纯文本. 1.抽象类:InputStream 和 Reader InputStream和Reader是所有输入流的基类,它们是两个抽象类,是所有输入流的模版,其中定义的方法在所有输入流中都可

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

关于Java中面向对象章节、IO 流中的重点基础知识。

一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多态性:应用程序不必对每个派生类进行方法调用,只需要对抽象基类处理即可,大大提高程序的复用性,可以提高可扩充性和可维护性. 二.多态中的向上转型 的作用以及向下转型使用的原因 答:在多态中向上转型的是作用是,父类的引用对象名指向子类的实体,也就是用一个抽象的基类去调用每一个派生子类,向下转型的原因为,