IO面试题

1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。其中,

所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类;

而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类。

【首先需要明白的是:流是干什么的???(为了永久性的保存数据)

  根据数据流向的不同分为输入流和输出流;

  根据处理数据类型的不同分为字符流和字节流;

【然后需要明白的是输入模式和输出模式是谁流向谁:

InputStream(字节输入流)和Reader(字符输入流)通俗的理解都是读(read)的。

OutputStream(字节输出流)和Writer(字符输出流)通俗的理解都是写(writer)的。

最后下面搞清楚各种流的类型的该怎么用,谁包含谁,理清思路。

2:InputStream类是字节输入流的抽象类,是所有字节输入流的父类,InputStream类具有层次结构如下图所示;

 

3:java中的字符是Unicode编码的,是双字节的。InputStream是用来处理字节的,在处理字符文本时很不方便。Java为字符文本的输入提供了专门的一套类Reader。Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类。

Reader

4:输出流OutputStream类是字节输入流的抽象类,此抽象类表示输出字节流的所有类的超类。

OutputStream

5:Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。

Writer

6:File类是IO包中唯一代表磁盘文件本身的对象。通过File来创建,删除,重命名文件。File类对象的主要作用就是用来获取文本本身的一些信息。如文本的所在的目录,文件的长度,读写权限等等。(有的需要记忆,比如isFile(),isDirectory(),exits();有的了解即可。使用的时候查看API)

详细如下:

File类(File类的概述和构造方法)

A:File类的概述

  File更应该叫做一个路径

  文件路径或者文件夹路径

  路径分为绝对路径和相对路径

       绝对路径是一个固定的路径,从盘符开始

 相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下

  查看API指的是当前路径

  文件和目录路径名的抽象表示形式

B:构造方法

File(String pathname):根据一个路径得到File对象

  File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

  File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

File类(File类的创建功能)

  A:创建功能

public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

    public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

    public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

(使用createNewFile()文件创建的时候不加.txt或者其他后缀也是文件,不是文件夹;使用mkdir()创建文件夹的时候,如果起的名字是比如aaa.txt也是文件夹不是文件;)

注意事项:

如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

File类(File类的重命名和删除功能)

  A:重命名和删除功能

    public boolean renameTo(File dest):把文件重命名为指定的文件路径

    public boolean delete():删除文件或者文件夹

  B:重命名注意事项

    如果路径名相同,就是改名。

    如果路径名不同,就是改名并剪切。

  C:删除注意事项:

 Java中的删除不走回收站。

要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

File类(File类的判断功能)

  A:判断功能

public boolean isDirectory():判断是否是目录

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public boolean canRead():判断是否可读

public boolean canWrite():判断是否可写

public boolean isHidden():判断是否隐藏

File类(File类的获取功能)

  A:获取功能

    public String getAbsolutePath():获取绝对路径

    public String getPath():获取路径

    public String getName():获取名称

    public long length():获取长度。字节数

    public long lastModified():获取最后一次的修改时间,毫秒值

                public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

    public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

File类(文件名称过滤器的概述及使用)

  A:文件名称过滤器的概述

  public String[] list(FilenameFilter filter)

  public File[] listFiles(FileFilter filter)

 

File的一些操作

public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

list()获取某个目录下所有的文件或者文件夹:

 

 

案例演示:

获取某种格式的文件比如获取某种后缀的图片,并输出文件名:

下面演示获取文件夹下面子目录里面的文件获取(并没有完全获取子目录的子目录等等,仅仅获取了子一级目录):

 

A:文件名称过滤器的概述

    public String[] list(FilenameFilter filter)

    public File[] listFiles(FileFilter filter)

 

7:下面以一些字节输入输出流具体的案例操作(操作的时候认清自己使用的是字节流还是字符流):

注意:read()方法读取的是一个字节,为什么返回是int,而不是byte

字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111;那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上;24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型

FileInputStream的单个字节读取:

FileOutputStream的单个字节写入:

 

FileInputStream和FileOutputStream定义小数组进行读写操作:(文件拷贝也是这样。)

IO流(BufferedInputStream和BufferOutputStream拷贝)

* A:缓冲思想

  * 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,

  * 这是加入了数组这样的缓冲区效果,java本身在设计的时候,

  * 也考虑到了这样的设计思想,所以提供了字节缓冲区流

* B.BufferedInputStream

  * BufferedInputStream内置了一个缓冲区(数组)

  * 从BufferedInputStream中读取一个字节时

  * BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个

  * 程序再次读取时, 就不用找文件了, 直接从缓冲区中获取

  * 直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个

* C.BufferedOutputStream

  * BufferedOutputStream也内置了一个缓冲区(数组)

  * 程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中

  * 直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里

 

面试题小数组的读写和带Buffered的读取哪个更快?

  * 定义小数组如果是8192个字节大小和Buffered比较的话

  * 定义小数组会略胜一筹,因为读和写操作的是同一个数组

  * 而Buffered操作的是两个数组

IO流(flush和close方法的区别)

flush()方法: 用来刷新缓冲区的,刷新后可以再次写出(字节缓冲流内置缓冲区,如果没有读取出来,可以使用flush()刷新来)

close()方法:用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出

8:字符流FileReader和FileWriter

字符流是什么

  * 字符流是可以直接读写字符的IO流

* 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.

IO流(什么情况下使用字符流)

* 字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.

* 程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流

* 读取的时候是按照字符的大小读取的,不会出现半个中文

* 写出的时候可以直接将字符串写出,不用转换为字节数组

 

IO流(字符流是否可以拷贝非纯文本的文件)

* 不可以拷贝非纯文本的文件

* 因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去

* 如果是?,直接写出,这样写出之后的文件就乱了,看不了了

 

一些面试题链接:



作者:聂叼叼
链接:https://www.jianshu.com/p/8316ec8e185d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

===============================================================================================

Java IO 分类

Java BIO: 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO: 同步非阻塞,服务器实现模式为一个请求一个线程,即当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。BIO与NIO一个比较重要的不同,是我们使用BIO的时候往往会引入多线程,每个连接一个单独的线程;而NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。

Java AIO(NIO.2): 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

名词解释

同步:指的是用户进程触发IO操作需要等待或者轮询的去查看IO操作执行完成才能执行其他操作.这种方式性能比较差,只有一些对数据安全性要求比较高的场景中才会使用.

异步:异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知)

阻塞:所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止

非阻塞:非阻塞状态下, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待

BIO、NIO、AIO适用场景分析

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

Java NIO和IO的主要区别

面向流与面向缓冲. Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。

阻塞与非阻塞IO Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

选择器(Selectors) Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。



作者:jemmm
链接:https://www.jianshu.com/p/e38b2cc54144
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

===============================================================================================

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41768263/article/details/80453196
1.java中有几种类型的流?jdk为每种类型的流提供了一些抽象类以供继承,请说出它们分别是什么?

解题思路:了解io流的体系(重要)就可以了

从大的方面来分可以分为字节流和字符流.字符流提供了提供了reader和writer;字节流提供了outputstream 和inputstream.

 

2.字符流和字节流有什么区别?(重要)

解题思路:从读写的原理上来进行区分会好记一点(字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串;而字节流处理单元为 1 个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是音频文件、图片、歌曲,就用字节流好点(避免数据丢失);如果是关系到中文(文本)的,用字符流好点)

字符流以字符或者字符数组的形式读写数据,只能读写二进制文件;字节流能读写各种类型的数据.

 

3.什么是java序列化,如何实现java序列化?(重要)

解题思路:像这样的题,一般先做名词解释,然后阐述作用和使用方法

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制)。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

注解:当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

  将需要序化的类实现Serializable接口就可以了,该接口没有任何方法,可以理解为一个标记,即表明这个类可以序列化。注意的是被关键字static、transient修饰的变量不能被序列化。在被序列化后,transient修饰的变量会被设为初始值。如int型的是0、对象型的是null.

1.概念

  序列化:把Java对象转换为字节序列的过程。
  反序列化:把字节序列恢复为Java对象的过程。

2.用途

对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。

 

4.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别(一般是笔试题的选择题里面出的多一点)

Bit是最小的传输单位,byte是最小的存储单位,1byte=8bit,char 是一种基本数据类型,1char=2byte.

 

5.BufferedReader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法

解题思路:望文知意,Reader是字符流,而buffer是缓冲的作用,缓冲区是基于内存的,起到读写高效的作用;所以BufferedReader是高效字符流

BufferedReader是字符流,也是一种包装流,用来增强reader流.主要用来读取数据的,最经典的方法是readline,可以一次读一行,是reader不具备的.

 

6.什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征

节点流: 直接与数据源相连,用于输入或者输出
处理流:在节点流的基础上对之进行加工,进行一些功能的扩展
处理流的构造器必须要传入节点流的子类

 

7.如果我要对字节流进行大量的从硬盘读取,要用那个流,为什么?

解题思路:因为明确说了是对字节流的读取,所以肯定是inputstream或者他的子类,又因为要大量读取,肯定要考虑到高效的问题,自然想到缓冲流。

用BufferedInputStream,原因:BufferedInputStream是InputStream的缓冲流,使用它可以防止每次读取数据时进行实际的写操作,代表着使用缓冲区。不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里。等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多!并且也可以减少对磁盘的损伤。

 

8.如果我要打印出不同类型的数据到数据源,那么最适合的流是那个流,为什么?

解题思路:要考虑到打印的问题,就要用到打印输出流(printstream:操作字节流;或者是PrintWriter操作字符流)

用printstream,因为只有字节流才能读写各种类型的数据.

 

9.怎么样把输出字节流转换成输出字符流,说出它的步骤?

解题思路:把字节流转成字符流,这里肯定就要用到适配器模式,很自然的要想到outputstreamwriter。它继承了Writer接口,但要创建它必须在构造函数中传入一个outputstream的实例,outputstreamwriter的作用也就是将outputstream适配到Writer。,它实现了Reader接口,并且持有了InputStream的引用。(关于适配器的作用,可以想一下电脑转接头的例子)

利用转换流outputstreamwriter.创建一个字节流对象,将其作为参数传入转换流outputstreamwriter中,得到字符流对象.

 

10.什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?

对象序列化:将对象以二进制的形式保存到硬盘上;

反序列化:将二进制文件转化为对象读取.

将需要序化的类实现Serializable接口

 

11.说说你对io流的理解

解题思路:个人觉得,可以讲io流的作用和体系

io流就相当于读写数据的一个管道.主要分为输入流和输出流,分别对应读数据和写数据.

 

12.谈一谈io流中用到的适配器模式和装饰者模式

解题思路:首先,要知道装饰者模式和适配器模式的作用;其次,可以自己举个例子把它的作用生动形象地讲出来;最后,简要说一下要完成这样的功能需要什么样的条件。

装饰器模式:就是动态地给一个对象添加一些额外的职责(对于原有功能的扩展)。

1.它必须持有一个被装饰的对象(作为成员变量)。

2.它必须拥有与被装饰对象相同的接口(多态调用、扩展需要)。

3.它可以给被装饰对象添加额外的功能。

比如,在io流中,FilterInputStream类就是装饰角色,它实现了InputStream类的所有接口,并持有InputStream的对象实例的引用,BufferedInputStream是具体的装饰器实现者,这个装饰器类的作用就是使得InputStream读取的数据保存在内存中,而提高读取的性能。

适配器模式:将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。

1.适配器对象实现原有接口

2.适配器对象组合一个实现新接口的对象

3.对适配器原有接口方法的调用被委托给新接口的实例的特定方法(重写旧接口方法来调用新接口功能。)

比如,在io流中, InputStreamReader类继承了Reader接口,但要创建它必须在构造函数中传入一个InputStream的实例,InputStreamReader的作用也就是将InputStream适配到Reader。 InputStreamReader实现了Reader接口,并且持有了InputStream的引用。这里,适配器就是InputStreamReader类,而源角色就是InputStream代表的实例对象,目标接口就是Reader类。

适配器模式主要在于将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的;而装饰器模式不是要改变被装饰对象的接口,而是保持原有的接口,但是增强原有对象的功能,或改变原有对象的方法而提高性能。
 ———————————————— 
版权声明:本文为CSDN博主「公子尧」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41768263/article/details/80453196

===============================================================================================

1.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别

答案

Bit最小的二进制单位 ,是计算机的操作部分 取值0或者1
Byte是计算机操作数据的最小单位由8位bit组成 取值(-128-127)
Char是用户的可读写的最小单位,在java里面由16位bit组成 取值(0-65535)

Bit 是最小单位 计算机 只能认识 0或者1 

8个字节 是给计算机看的
字符 是看到的东西  一个字符=二个字节
 

 2.什么是流,按照传输的单位,分成哪两种流,并且他们的父类叫什么流是指数据的传输

答案

字节流,字符流 
字节流:InputStream OutputStream
字符流:Reader Writer

3.流按照传输的方向可以分为哪两种,分别举例说明

答案

输入输出相对于程序
输入流InputStream
,输出流OutputStream

4.按照实现功能分为哪两种,分别举例说明

答案

节点流,处理流
节点流:OutputStream
处理流: OutputStreamWriter

  5.BufferedReader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法

答案

属于处理流中的缓冲流,可以将读取的内容存在内存里面,有readLine()方法

  6.什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征

答案

节点流 直接与数据源相连,用于输入或者输出
处理流:在节点流的基础上对之进行加工,进行一些功能的扩展
处理流的构造器必须要 传入节点流的子类

  7.如果我要对字节流进行大量的从硬盘读取,要用那个流,为什么

答案

BufferedInputStream 使用缓冲流能够减少对硬盘的损伤

  8.如果我要打印出不同类型的数据到数据源,那么最适合的流是那个流,为什么

答案

Printwriter 可以打印各种数据类型

  9.怎么样把我们控制台的输出改成输出到一个文件里面,这个技术叫什么

答案

SetOut(printWriter,printStream)重定向

  11.怎么样把输出字节流转换成输出字符流,说出它的步骤

答案

使用 转换处理流OutputStreamWriter 可以将字符流转为字节流
New OutputStreamWriter(new FileOutputStream(File file));

  12.把包括基本类型在内的数据和字符串按顺序输出到数据源,或者按照顺序从数据源读入,一般用哪两个流

答案

DataInputStream DataOutputStream

  13.把一个对象写入数据源或者从一个数据源读出来,用哪两个流

答案

ObjectInputStream ObjectOutputStream

   14.什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作

答案

对象序列化,将对象以二进制的形式保存在硬盘上
反序列化;将二进制的文件转化为对象读取
实现serializable接口

不想让字段放在硬盘上就加transient

  15.如果在对象序列化的时候不想给一个字段的数据保存在硬盘上面,采用那个关键字?

答案

transient关键字

  16.在实现序列化接口是时候一般要生成一个serialVersionUID字段,它叫做什么,一般有什么用

答案

是版本号,要保持版本号的一致 来进行序列化

为了防止序列化出错

17.InputStream里的read()返回的是什么,read(byte[] data)是什么意思,返回的是什么值

答案

返回的是所读取的字节的int型(范围0-255)
read(byte [ ] data)将读取的字节储存在这个数组
返回的就是传入数组参数个数

Read  字节读取字节  字符读取字符

  18.OutputStream里面的write()是什么意思,write(byte b[], int off, int len)这个方法里面的三个参数分别是什么意思

答案

write将指定字节传入数据源
Byte b[ ]是byte数组
b[off]是传入的第一个字符
b[off+len-1]是传入的最后的一个字符 
len是实际长度

  19.流一般需要不需要关闭,如果关闭的话在用什么方法,一般要在那个代码块里面关闭比较好,处理流是怎么关闭的,如果有多个流互相调用传入是怎么关闭的?

答案

流一旦打开就必须关闭,使用close方法
放入finally语句块中(finally 语句一定会执行)
调用的处理流就关闭处理流
多个流互相调用只关闭最外层的流

  20.Java中的所有的流可以分为几大类,它们的名字是什么,各代表什么

答案

分为 字节输入流 InputStream 
字节输出流 OutputStream
字符输入流 Reader
字符输出流 Writer
所有流都是这四个流的子类


说下常用的io流

Icon

InputStream,OutputStream,
FileInputStream,FileOutputStream,
BufferedInputStream,BufferedOutputStream
Reader,Writer
BufferedReader,BufferedWriter


21 写一段代码读取一个序列化的对象一般使用哪种Stream?

Icon

A、InputStream B、FileReader C、DataInputStream D、ObjectStream


22 io流怎样读取文件的?

Icon

使用File对象获取文件路径,通过字符流Reader加入文件,使用字符缓存流BufferedReader处理Reader,再定义一个字符串,循环遍历出文件。代码如下:
File file = new File("d:/spring.txt");
try {
Reader reader = new FileReader(file);
BufferedReader buffered = new BufferedReader(reader);
String data = null;
while((data = buffered.readLine())!=null){
System.out.println(data);
}
catch (FileNotFoundException e) {
e.printStackTrace();
catch (IOException e) {
e.printStackTrace();
}


23 说说你对io流的理解

Icon

Io流主要是用来处理输入输出问题,常用的io流有InputStream,OutputStream,Reader,Writer等


24 JAVA的IO流和readLine方法

Icon

Java的io流用来处理输入输出问题,readLine是BufferedReader里的一个方法,用来读取一行。


25 用什么把对象动态的写入磁盘中,写入要实现什么接口。

Icon

ObjectInputStream,需要实现Serializable接口

26  FileInputStream 创建详情,就是怎样的创建不报错,它列出了几种形式!

Icon

FileInputStream是InputStream的子类,通过接口定义,子类实现创建FileInputStream,


27 用io流中的技术,指定一个文件夹的目录,获取此目录下的所有子文件夹路径 

28 请问你在什么情况下会在你得java代码中使用可序列化? 如何实现java序列化?

Icon

把一个对象写入数据源或者从一个数据源读出来,使用可序列化,需要实现Serializable接口

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值