java_io流
java开发工程师面试题

java开发工程师面试题一、基础知识部分1. Java的特点及优势Java是一种面向对象的编程语言,具有跨平台、安全可靠、功能强大等优势。
其特点包括:- 简单易学:Java语法类似于C++,减少了开发者的学习成本。
- 面向对象:Java支持封装、继承和多态等面向对象的特性,使得代码更易于管理和维护。
- 跨平台性:通过Java虚拟机(JVM)实现,一次编写,到处运行,无需为具体平台编写不同的代码。
- 高性能:Java通过即时编译器优化字节码,提供了高效的执行性能。
- 安全性:Java提供了安全管理机制和垃圾回收机制,减少了内存泄漏和代码安全问题。
- 多线程:Java内置多线程支持,方便开发者编写多线程程序。
2. Java中的基本数据类型有哪些?Java的基本数据类型包括:byte、short、int、long、float、double、boolean和char。
3. 什么是Java中的自动装箱和拆箱?自动装箱(Autoboxing)是指将基本数据类型自动转换为对应的封装类型,而拆箱(Unboxing)则是相反的过程,将封装类型自动转换为对应的基本数据类型。
4. 什么是Java中的重载和重写?重载(Overload)是指在同一个类中,可以定义多个方法名相同但参数列表不同的方法。
重载的方法可以有不同的返回类型,但不能仅通过返回类型的不同来区分。
重写(Override)是指子类对父类中已有方法进行重新定义。
重写要求方法名、参数列表和返回类型都相同,可以重新定义方法体,但不能改变方法的基本行为。
5. Java中的final关键字有什么作用?final关键字可以用于修饰类、方法和变量。
- 修饰类:被final修饰的类无法被继承。
- 修饰方法:被final修饰的方法无法在子类中被重写。
- 修饰变量:被final修饰的变量为常量,只能被赋值一次,值不能被修改。
二、面向对象编程部分1. 什么是面向对象编程(OOP)?面向对象编程是一种编程范式,通过将数据和操作数据的方法封装在一起,以对象的方式来组织代码。
Java面试题(IO流)

1、以下哪些类提供了创建一个目录的方法?AA、FileB、DataOutputC、DirectoryD、FileDescriptor解析:不解释2、以下说法正确的是A、RandomAccessFile类是File类的子类B、FileWriter类提供有操作基本数据类型的方法C、RandomAccessFile类提供有删除磁盘文件的方法D、File类提供有删除磁盘文件的方法解析:不解释3、以下哪个类的构造器需要mode参数r或rw?CA、DataInputStreamB、InputStreamC、RandomAccessFileD、File解析:不解释4、以下哪个关于Serializable的描述是正确的?BA、Serializable是Java语言中的一个关键字B、Serializable是一个可以被实现的接口C、Serializable是一个可以被继承的类D、以上均不对解析:Serializable序列化接口5、从InputStream对象中如何创建一个Reader对象?CA、使用InputStream类中定义的createReader()方法B、使用Reader类中的createReader()方法C、构造一个InputStreamReader实例,将InputStream对象作为InputStreamReader类构造器的参数传入D、构造一个OutputStreamReader实例,将InputStream对象作为OutputStreamReader 类构造器的参数传入解析:不解释6、以下代码的执行结果是?Cpublic class Example {public static void main(String[] args) {File f = new File("c:\\large.txt");}}A、large.txt文件在本地硬盘上被创建B、在Unix系统上运行失败,因为路径分割符不正确C、large.txt文件在本地硬盘上没有被创建D、如果large.txt文件已经存在,则一个异常被抛出解析:没有做mkdir动作7、以下代码的执行结果是?Apublic class Example {public static void main(String[] args) {RandomAccessFile raf = new RandomAccessFile("test.java", "rw");raf.seek(raf.length());}}A、代码编译失败B、运行期IOException异常抛出C、文件指针定位在最后一个字符前D、文件指针定位在最后一个字符后解析:seek方法的作用是改变文件索引指针位置,但是题目中没有声明异常8、以下代码的执行结果是?Apublic class Example {public static void main(String[] args) throws IOException {PrintStream pr = new PrintStream(new FileOutputStream("outfile"));System.out = pr;System.out.println("OK!");}}A、代码编译失败,因为为System.out是一个常量,不能赋值B、代码编译成功,但因为System.out是一个常量,导致运行期异常抛出C、控制台输出OK!D、outfile文件中输出OK!解析:不解释9、给出以下代码的执行结果是?Apublic class Example {public static void main(String[] args) throws IOException {StringReader strinin = new StringReader("test");LineNumberReader in = new LineNumberReader(strinin);PrintWriter out = new PrintWriter(System.out);out.println(in.readLine());out.flush();}}A、testB、1.testC、1:testD、1 test解析:10、以下代码的执行结果是?Bpublic class Example {public static void main(String[] args) throws IOException {RandomAccessFile file = new RandomAccessFile("test.txt", "rw");file.writeBoolean(true);file.writeInt(123456);file.writeInt(7890);file.writeLong(10000000);file.writeInt(777);file.writeFloat(0.0001f);file.seek(5);System.out.println(file.readInt());file.close();}}A、123456B、7890C、10000000D、777解析:本例中共写入字节数为1(boolean)+4(int)+8(long)+4(int)+8(float)=29,seel ()方法用于从文件起始位置跳过制定数量的字节数,seek(5)是跳过了5个字节,所以从第6个字节开始读取,即从写入的第二个int型值(7890)开始读取,故打印输出为789011、以下代码的执行结果是?Cpublic class Example {public static void main(String[] args) throws IOException {try {String strString = "test";char buffer[] = new char[strString.length()];strString.getChars(0, strString.length(), buffer, 0);FileWriter f = new FileWriter("MyFile1.txt");FileWriter f1 = f;f1.close();for (int i = 0; i < buffer.length; i++) {f.write(buffer[i] + "");}f.close();FileWriter f2 = new FileWriter("MyFile2.txt");f2.write(buffer);f2.close();} catch (IOException e) {System.out.println(e.getMessage());}}}A、运行期无异常抛出B、执行f1.close()抛出IOException异常C、f.write(buffer[i]+"")抛出IOException异常D、执行new FileWriter("MyFile1.txt")抛出IOException解析:此行的上一行已经关闭流12、以下哪项是Java语言中定义的字节流?ADA、OutputStreamB、ReaderC、WriterD、InputStream解析:不解释13、在输入流的read方法返回哪个值的时候表示读取结束?CA、0B、1C、-1D、null解析:不解释14、为了从文本文件中逐行读取内容,应该使用哪个处理流对象?AA、BufferedReaderB、BufferedWriterC、BufferedInputStreamD、BufferedOutputStream解析:readLine方法15、为了实现自定义对象的序列化,该自定义对象必须实现哪个接口?BA、VolatileB、SerializableC、RunnableD、Transient解析:Serializable序列化接口16、以下程序执行结果是?Bpublic class Example {public static void main(String[] args) throws IOException {String s = "x,yy,123";Scanner sc = new Scanner(s);while (sc.hasNext()) {System.out.println(sc.next() + " ");}}}A、x yyB、x,yy,123C、x yy 123D、x,yy解析:.Next()是字符串输入方法17、现有:f是一个File类实例的合法引用fr是一个FileReader类实例的合法引用br是一个BufferedReader类实例的合法引用如下代码:String line = null;//插入代码处System.out.println(line);}哪一行代码插入到插入代码处将循环一次输出文本文件的一行?DA、while((line = f.read())!=null){B、while((line = fr.read())!=null){C、while((line = br.read())!=null){D、while((line = br.readLine())!=null){解析:readLine方法返回值为String18、现有int x = reader.read(),下列哪一项正确BA、reader不是FileReader或者BufferedReader类型B、reader可以使FileReader或者BufferedReaderC、reader可以使FileReader类型,但不能使BufferedReader类型D、reader可以使BufferedReader类型,但不能使FileReader类型解析:不解释19、现有:String s = "write a line to a file";w.print(s + "\n");哪一个是对的?CA、w既可以是PrintWriter类型,也可以是BufferedWriter类型B、w既不可以是PrintWriter类型,也不可以是BufferedWriter类型C、w可以是PrintWriter类型,但不可以是BufferedWriter类型D、w既可以是BufferedWriter类型,也可以是PrintWriter类型解析:不解释20、有如下代码:public class Example implements Serializable {Collar c = new Collar();}class Collar implements Serializable {CollarPart cp1 = new CollarPart();CollarPart cp2 = new CollarPart();}class CollarPart implements Serializable {}如果Example实例被序列化,则多少对象将被序列化?DA、1B、2C、3D、4解析:new Example c cp1 cp221、以下关于File类的描述哪些是正确的?ACA、File类可以用于访问当前工作路径中的文件B、当一个File类实例被构建时,对应的目录或文件在本地文件系统中被创建C、File类可以用于访问本地文件系统中的目录或文件D、当一个File类实例被垃圾回收器回收后,对应的目录或文件也被删除解析:File实例被构建时需要mkdir才可以创建文件File实例被回收后,创建的文件不会被删除22、以下哪些语句是构建RandomAccessFile实例的正确形式?ADA、RandomAccessFile("file","r");B、RandomAccessFile("r","file");C、RandomAccessFile('r',"file");D、RandomAccessFile("file","rw");解析:不解释23、请问以下哪些修饰符用于修饰类属性时,该属性不能被序列化?BCA、privateB、staticC、transientD、protected解析:static transient volatile final不可以序列化24、以下哪些是FileOutputSteram类的正确构造形式?A、FileOutputStream(FileDescriptor fd)B、FileOutputStream(String n,boolean a)C、FileOutputStream(boolean a)D、FileOutputStream(File f)解析:FileOutputStream(File file)FileOutputStream(File file, boolean append)FileOutputStream(FileDescriptor fdObj)FileOutputStream(String name)FileOutputStream(String name, boolean append)25、以下哪些是定义在java.io包中的抽象类?ACA、InputStreamB、PrintStreamC、ReaderD、FileInputStream解析:不解释26、以下哪些描述是正确的?ACA、InputStream和OutputStream类是基于字节流的B、ObjectInputStream类和ObjectOutputStream类不支持序列化的对象C、Reader和Writer是基于字符流的D、Reader类和Writer类是支持对象序列化的首选解析:不解释27、以下哪些描述是正确的?ABA、Writer类可以使用不同的字符编码向输出流写入字符B、Writer类可以向输出流写入Unicode字符C、Writer类提供向输出流写入任意Java基本数据类型的方法D、Writer类提供向输出流写入引用数据类型的方法解析:不解释28、什么是java序列化,如何实现java序列化?解析:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
io流面试题

io流面试题在Java开发中,IO流是一个常见而重要的概念。
在面试中,经常会被问到与IO流相关的问题。
了解和掌握IO流的概念、原理和常见的使用方式,对于成功通过面试至关重要。
本文将介绍一些常见的IO流面试题及其答案,帮助读者更好地准备面试。
1. 什么是IO流?IO流是指输入输出流,用于处理设备之间的数据传输。
在Java中,IO流可以用于读取文件内容、读取网络数据、向文件写入数据等。
2. Java中的IO流有哪些分类?Java中的IO流可以分为字节流和字符流。
- 字节流:以字节为单位进行数据的输入和输出,包括InputStream和OutputStream。
- 字符流:以字符为单位进行数据的输入和输出,包括Reader和Writer。
3. InputStream和OutputStream的主要作用是什么?InputStream是一个抽象类,用于读取字节流。
OutputStream也是一个抽象类,用于写入字节流。
它们是Java中所有输入流和输出流的基类,是IO操作的基础。
4. Reader和Writer的主要作用是什么?Reader是一个抽象类,用于读取字符流。
Writer也是一个抽象类,用于写入字符流。
它们可以处理Unicode字符,并且提供了专门用于字符处理的方法。
在读取或写入文本文件等操作中,常常使用字符流。
5. Java的IO流如何进行数据的读取和写入?Java的IO流提供了丰富的类和方法来进行数据的读取和写入。
对于输入流,通常可通过创建相关的InputStream或Reader对象,并使用read()或readLine()等方法来读取数据。
对于输出流,通常可通过创建相关的OutputStream或Writer对象,并使用write()等方法来写入数据。
6. 请解释一下Java中的File类的作用。
File类用于表示文件或目录的路径。
可以通过File类来操作文件或目录,比如创建文件、删除文件、判断文件/目录是否存在等。
java io面试题

java io面试题Java IO(Input/Output)是Java程序中进行输入输出的基础类库,它提供了一套丰富的类和方法,用于处理文件、网络连接、输入流和输出流等操作。
在Java开发中,掌握和理解Java IO的相关知识是非常重要的。
本文将介绍一些常见的Java IO面试题,帮助读者更好地应对面试。
1. 请解释一下Java IO的工作原理。
Java IO主要通过流(Stream)的方式来操纵数据。
流是输入/输出操作的顶级抽象类,它可以理解为是一个数据在源和目标之间的一个通道。
Java中的流按照输入和输出分成了两个体系:输入流(InputStream)和输出流(OutputStream),分别用于读取和写入数据。
其中,输入流从源读取数据,输出流向目标写入数据。
2. 请解释一下字节流和字符流的区别。
Java IO中的字节流(Byte Stream)操作的是8位字节,它适用于二进制文件和字节流形式的输入输出。
而字符流(Character Stream)操作的是16位Unicode字符,它适用于文本文件和字符流形式的输入输出。
字节流和字符流在处理文本文件时有很大的不同,字节流需要自己处理字符编码转换的问题,而字符流则提供了字符编码转换的功能。
3. 请解释一下Java IO中的四种基本的File类(File、FileReader、FileWriter、FileInputStream、FileOutputStream)的作用,并给出它们的示例使用方式。
- File类:用于表示文件或目录的路径,可以操作文件或目录的属性、创建和删除文件或目录等。
```javaFile file = new File("path/to/file.txt");boolean exists = file.exists();boolean isDirectory = file.isDirectory();```- FileReader和FileWriter类:用于从文件中读取字符流和向文件中写入字符流的操作。
io流的面试题

io流的面试题在Java编程中,IO流是一个非常重要的概念。
在面试过程中,经常会涉及到与IO流相关的问题。
本文将介绍一些常见的IO流面试题,并给出相应的解答。
以下是一些常见的问题和答案:1. 什么是IO流?IO流是用于处理输入输出的机制,它是Java程序与外部世界进行数据交换的方式。
输入流用于从外部读取数据,输出流用于向外部写入数据。
2. IO流的分类有哪些?IO流可以分为字节流和字符流。
字节流以字节为单位进行读写,而字符流以字符为单位进行读写。
字节流可以处理任意类型的数据,而字符流主要用于处理文本数据。
3. 文件读写时,常用的字节流和字符流是什么?常用的字节流是InputStream和OutputStream,常用的字符流是Reader和Writer。
它们都是抽象类,具体的实现类有很多,如FileInputStream、FileOutputStream、FileReader和FileWriter。
4. 如何使用字节流进行文件复制?使用字节流进行文件复制可以通过以下步骤实现:- 创建一个输入流对象,用于读取源文件;- 创建一个输出流对象,用于写入目标文件;- 使用循环读取字节,并将其写入输出流,直到读取到文件末尾;- 关闭输入流和输出流。
5. 如何使用字符流进行文件复制?使用字符流进行文件复制可以通过以下步骤实现:- 创建一个输入流对象,用于读取源文件;- 创建一个输出流对象,用于写入目标文件;- 使用循环读取字符,并将其写入输出流,直到读取到文件末尾;- 关闭输入流和输出流。
6. 什么是缓冲流?为什么要使用缓冲流?缓冲流是对字节流和字符流的包装,通过内部的缓冲区提高了读写的效率。
使用缓冲流可以减少对操作系统的IO次数,提高程序的性能。
7. 缓冲流的使用方法是什么?缓冲流的使用方法如下:- 创建一个字节流或字符流的对象;- 创建一个缓冲流的对象,将字节流或字符流对象作为参数传入;- 使用缓冲流来读写数据;- 关闭缓冲流,它会自动关闭内部的字节流或字符流。
javaio流练习题

javaio流练习题Java IO流练习题Java IO流是Java语言中用于输入和输出操作的重要组件。
掌握IO 流的使用对于Java程序员来说是至关重要的。
本文将介绍一些Java IO 流的练习题,旨在帮助读者熟悉IO流的用法。
练习一:文件复制题目要求:编写一个程序,实现文件的复制功能。
程序接收两个文件路径作为参数,将源文件复制到目标文件路径下,并输出复制完成的信息。
解题思路:1. 使用FileInputStream读取源文件的内容;2. 使用FileOutputStream将读取到的内容写入到目标文件;3. 分别关闭输入流和输出流。
练习二:文本文件排序题目要求:编写一个程序,从一个文本文件中读取多行文本,并按字母顺序对其进行排序,然后将排序后的结果写入到另一个文件中。
解题思路:1. 使用BufferedReader读取文本文件的内容,将每一行存储到一个List<String>中;2. 使用Collections类的sort方法对List<String>进行排序;3. 使用BufferedWriter将排序后的结果写入到另一个文本文件。
练习三:对象序列化与反序列化题目要求:编写一个程序,实现对象的序列化和反序列化。
程序可以接收一个对象作为参数,将对象序列化后保存到一个文件中,并可以将文件中的对象反序列化,并输出对象的内容。
解题思路:1. 创建一个实现Serializable接口的类,表示需要被序列化和反序列化的对象;2. 使用ObjectOutputStream将对象写入到文件中;3. 使用ObjectInputStream从文件中读取对象,并输出对象的内容。
练习四:文件压缩与解压缩题目要求:编写一个程序,实现文件的压缩和解压缩功能。
程序可以接收一个文件作为参数,将文件压缩后保存到另一个文件中,并可以将压缩后的文件解压缩。
解题思路:1. 使用ZipOutputStream将文件压缩并写入到另一个文件中;2. 使用ZipInputStream从压缩文件中读取内容,并解压缩。
Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Prope。。。

Java⾃学第10期——File类与IO流(输⼊输出流、处理流、转换流、缓冲流、Prope。
1、IO简介IO(输⼊输出)通过java.io包下的类和接⼝来⽀持,包下包括输⼊、输出两种IO流,每种输⼊输出流⼜可分为字符流和字节流两⼤类。
2、File类File类是io包下与平台⽆关的⽂件和⽬录,File能新建、删除、重命名⽂件和⽬录,不能访问⽂件本⾝,后者需要使⽤输⼊输⼊流。
2.1 构造⽅法File类的构造⽅法:File(File parent, String child) 参数:⽗路径,⼦路径根据 parent 抽象路径名和 child 路径名字符串创建⼀个新 File 实例。
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建⼀个新 File 实例。
File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建⼀个新 File 实例。
File(URI uri)通过将给定的 file: URI 转换为⼀个抽象路径名来创建⼀个新的 File 实例。
2.2 静态⽅法File类静态⽅法:static String pathSeparator()与系统有关的路径分隔符,为了⽅便,它被表⽰为⼀个字符串。
static char pathSeparatorChar()与系统有关的路径分隔符。
static String separator()与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串。
static char separatorChar()与系统有关的默认名称分隔符。
2.3 常⽤⽅法:2.3.1 获取相关public String getAbsolutePath()返回此File的绝对路径名字符串。
public String getPath()将此File转换为路径名字符串。
public String getName()返回由此File表⽰的⽂件或⽬录的名称。
【黑马程序员】Java IO流学习总结

【黑马程序员】Java IO流学习总结Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。
即数根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类•根据处理数据类型的不同分为:字符流和字节流•根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。
本质节流和字符流的区别:•读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映•处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能结论:只要是处理纯文本数据,就优先考虑使用字符流。
除此之外都使用字节流。
输入流和输出流对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据Java IO流对象1.输入字节流InputStream IO 中输入字节流的继承图可见上图,可以看出:1 InputStream 是所有的输入字节流的父类,它是一个抽象类。
2 ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它本地文件中读取数据。
PipedInputStream 是从与其它线程共用的管道中读取数据,与P 3 ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
2.输出字节流OutputStreamIO 中输出字节流的继承图可见上图,可以看出:1 OutputStream 是所有的输出字节流的父类,它是一个抽象类。
2 ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、PipedOutputStream 是向与其它线程共用的管道中写入数据,3 ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FileInputStream对象读文件示例 对象读文件示例2 对象读文件示例
public class FileInputStreamDemo2 { public static void main(String[] args) { try { File file = new File("test.txt"); //创建文件对象 创建文件对象 FileInputStream fis = new FileInputStream(file); //根据文件的字节长度创建字节数组 根据文件的字节长度创建字节数组 byte[] buf = new byte[(int)(file.length())]; fis.read(buf); //读取文件中的数据存放到字节数组中 读取文件中的数据存放到字节数组中 String str = new String(buf); //利用字节数组创建字符串 利用字节数组创建字符串 System.out.println(str); //打印字符串 打印字符串 fis.close(); //关闭流 关闭流 } catch (FileNotFoundException fnfe) { System.out.println("文件打开失败。"); 文件打开失败。 文件打开失败 } catch (IOException ioe) { ioe.printStackTrace(); } } }
java.io包简介 包简介
• java.io包也是Java内置的包,其中包含一系 列对文件和目录的属性进行操作,对文件进 行读写操作的类; • 程序中如果要使用到该包中的类,对文件或 流进行操作,则必须显式地声明如下语句: import java.io.*;
文件
• 什么是文件? 文件可以认为是相关记录或存放在一起的数据的 集合; • 文件一般是存放在磁盘上的,例如:硬盘、软盘 和光盘等等。
本章相关词汇
单
input output file directory stream write read source destination
词
输入 输出 文件, 文件,档案 目录 流 写,书写 读,阅读 源头, 源头,来源
说
明
目标, 目标,目的地
本章目标
• 了解java.io包 • 运用File类对文件或目录的属性进行操作 • 理解流,理解输入/输出流的概念 • 运用FileInputStream类和FileOutputStream类读/写字节文件 • 运用FileReader类和FileWriter类配合BufferedReader类和 BufferedWriter类读/写字符文件 • 使用BufferedReader类从控制台接受输入 • 运用DataInputStream类和DataOutputStream类读写数据文件
流向目的地的数据流 来自数据源的数据流
流 ( 续)
流的类型
• 根据流动方向的不同,流分为输入流和输出流; • 对于输入和输出流,由于传输格式的不同,又分 为字节流和字符流:
> 字节流是指பைடு நூலகம்位的通用字节流,以字节为基本单位,在
java.io包中,对于字节流进行操作的类大部分继承于 InputStream(输入字节流)类和OutputStream(输出字 节流)类; > 字符流是指16位的Unicode字符流,以字符(两个字节 )为基本单位,非常适合处理字符串和文本,对于字符 流进行操作的类大部分继承于Reader(读取流)类和 Writer(写入流)类。
File类中的常用方法 类中的常用方法
方法原型
boolean exists() boolean isFile() boolean isDirectory() String getName()
说 明
判断文件是否存在,存在返回 判断文件是否存在,存在返回true,否则返回 ,否则返回false 判断是否为文件,是文件返回 判断是否为文件,是文件返回true,否则返回 ,否则返回false 判断是否为目录,是目录返回 判断是否为目录,是目录返回true,否则返回 ,否则返回false 获得文件的名称
说
明
使用File对象创建文件输入流对象,如 对象创建文件输入流对象, 使用 对象创建文件输入流对象 果文件打开失败, 果文件打开失败,将抛出异常 使用文件名或路径创建文件输入流对象, 使用文件名或路径创建文件输入流对象, 如果文件打开失败, 如果文件打开失败,将抛出异常
FileInputStream类的常用方法 类的常用方法
File类 类
• File类的对象不但可以表示文件,还可以表示 目录,在程序中一个File类对象可以代表一个 文件或目录; • 当创建一个文件对象后,就可以利用它来对 文件或目录的属性进行操作,如:文件名、 最后修改日期、文件大小等等; • 需要注意的是,File对象并不能直接对文件进 行读/写操作(通过流进行读写操作),只能查 看文件的属性;
方 法 原 型 int read() throws IOException int read(byte[] b) throws IOException void close() throws IOException 说 明
读取文件中的数据,一次读取一个字节, 读取文件中的数据,一次读取一个字节,读 取的数据作为返回值返回, 取的数据作为返回值返回,如果读到文件末 尾则返回-1,有可能抛异常, 尾则返回 ,有可能抛异常,必须捕捉 读取文件中的数据, 读取文件中的数据,将读到的数据存放到 byte型数组中,并返回读取的字节的数量, 型数组中, 型数组中 并返回读取的字节的数量, 未读到数据返回-1,有可能抛异常, 未读到数据返回 ,有可能抛异常,必须捕 捉
File类示例 类示例
public class FileDemo { public static void main(String[] args) { //创建一个文件对象,使之与一个文件关联 创建一个文件对象, 创建一个文件对象 File file = new File("test.txt"); //显示与文件有关的属性信息 显示与文件有关的属性信息 System.out.println("文件或目录是否存在:" + file.exists()); 文件或目录是否存在: 文件或目录是否存在 System.out.println("是文件吗:" + file.isFile()); 是文件吗: 是文件吗 是目录吗: System.out.println("是目录吗:" + file.isDirectory()); 是目录吗 System.out.println("名称:" + file.getName()); 名称: 名称 System.out.println("绝对路径:" + file.getAbsolutePath()); 绝对路径: 绝对路径 文件大小: System.out.println("文件大小:" + file.length()); 文件大小 } }
重点: 重点
• 如何创建目录和文件. createNewFile() mkDir() mkDirs() isExists()
stream(流) (
• 流是指一连串流动的数据信号,是以先进先 出的方式发送和接收数据的通道。
InputStream
‘F’ ‘E’ ‘D’ ‘C’ ‘B’ ‘A’
OutputStream
InputStream抽象类介绍 抽象类介绍
使用FileInputStream类读文件 类读文件 使用
• FileInputStream类称为文件输入流,继承于 InputStream类,是进行文件读操作的最基本 类; • 它的作用是将文件中的数据输入到内存中, 我们可以利用它来读文件; • 由于它属于字节流,因此在读取Unicode字 符(如中文)的文件时可能会出现问题。
关闭流对象,有可能抛异常, 关闭流对象,有可能抛异常,必须捕捉
FileInputStream对象读文件示例 对象读文件示例1 对象读文件示例
public class FileInputStreamDemo1 { public static void main(String[] args) { try { File file = new File("test.txt"); //创建文件对象 创建文件对象 //使用文件对象创建文件输入流对象,相当于打开文件 使用文件对象创建文件输入流对象, 使用文件对象创建文件输入流对象 FileInputStream fis = new FileInputStream(file); for (int i = 0; i < file.length(); i++) { char ch = (char)(fis.read()); //循环读取字符 循环读取字符 System.out.print(ch); } System.out.println(); fis.close(); //关闭流 关闭流 } catch (FileNotFoundException fnfe) { System.out.println("文件打开失败。"); 文件打开失败。 文件打开失败 } catch (IOException ioe) { ioe.printStackTrace(); } } }
File类的构造方法 类的构造方法
• File类的构造方法有4种重载方式,常用的如下:
构 造 方 法 File(String pathname) 说 明
指定文件(或目录) 指定文件(或目录)名和路径创建文件对象
• 如:
//在当前目录下创建一个与aaa.txt文件名相关联的文件对象 File f1 = new File("aaa.txt"); //指明详细的路径以及文件名,请注意双斜线 File f2 = new File("D:\\Java\\Hello.java");