一、简答题
1、什么是流?流经常按照哪几种方式分类,每种方式又将流各分为哪几类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。 2、 简述字符流与字节流的区别。
字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的。
字符流采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化。 3、 Java中关于输入输出的类和接口及相应的异常一般是在哪个包里面? 标准输入输出是在java.lang包中 默认加载不用import导入
如果是流的输入输出以及其异常,在java.Io包中 需要import java.io.* 4 、Java中使用流有什么好处?
一般的文件读取 上传下载,网络连接,比如爬虫程序URLConnection 所有的序列化反序列化实现等等 5 、Java中关于输入输出流的几个父类分别是什么?并各写出这几个父类的主要成员(包括变量和主要的功能函数)及功能。 字节流常用基类:
InputStream,OutputStream 字符流常用基类: Reader Writer
转换流:
InputStreamReader:字节流通向字符流的桥梁 用于操作字节流的字符流对象 OutputStreamWriter:字符流通向字节流的桥梁 用于操作字符流的字节流对象
6、 画出Java中各输入输出流的继承关系图。 输入流:
输出流:
7、 按照访问介质不同,流分文几大类,各类中分别包含哪些类,并简述各类的功能。 输入流和输出流,以内存为参照物,读入内存的流为输入流,从内存中读出的流为输出流。
8、 标准输入输出流(System.out 和System.in)分别输入哪个流类。 字节数据流
9、 字节流与字符流转换是通过什么类来支持的,并写出这些类的主要成员及其功能。 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
10、 在输入输出处理中,常见的异常都有哪些,各代表什么含义? SQLException:操作数据库异常类。
ClassCastException:数据类型转换异常。
NumberFormatException:字符串转换为数字类型时抛出的异常。 NullPointerException(空指针异常),
IndexOutOfBoundsException(出界异常)
java.lang.ClassNotFoundException(指定类不存在异常)
java.lang.ArrayIndexOutOfBoundsException(数组下标越界) 11、 写出File类的各成员及其功能。 创建方法 删除方法 判断方法 获取方法 文件过滤
12、 RandomAccessFile 是通过什么来实现随机读取功能的。 文件指针 二、编程题 第一题:
编程实现,列出当前目录下所有文件和文件夹的名称。
要求:如果当前目录含有子文件夹,则也递归地列出子文件夹的内容;层次关系;文件夹的名称用尖括号括起来。 例如:lev1_file1 lev2_file1 package org.io.file; import java.io.*; class FindFile { private File f; private String flname=\"\"; //用于返回所要输出的文件名 private int count=0; //对所查询到的文件个数进行计数 public File getF() { return f; } public void setF(File f) { this.f = f; } public String getFlname() { return flname; } public void setFlname(String flname) { 用缩进地方式反映 this.flname = flname; } public void getFileName(File f){ if(f.isFile()){ System.out.println(f.getName()); //如果当前对象是一个文件,则直接输出 }else{ File fl[] = f.listFiles(); //如果当前当想是一个目录,则通过listFiles()方法返回一个当前文件夹下的对象数组 for (int i=0;i count++; }else{ this.getFileName(fl[i]); //通过递归,把返回的对象数组中属于目录的对象传递给this.getFileName(File f); } } } } public int getCount() { return count; } public void setCount(int count) { this.count = count; } } public class FileTest { public static void main(String[] args) throws Error { File f = new File(\"f:\\\\FTP\"); System.out.println(\"isDirectory:\"+f.isDirectory()); FindFile ff = new FindFile(); ff.getFileName(f); System.out.println(\"共查询到\"+ff.getCount()+\"个文件\"); System.out.println(ff.getFlname()); } } 第二题: 编写一个程序,用于从键盘读入信息,并存储到磁盘文件中去。 要求:1、以行的方式读入姓名和学号信息,例如:张三 20071215 (姓名和学号中间用一个空格隔开) 2、循环读入,直到用户输入\"quit\"或者\"QUIT\"结束 3、程序提示要用户输入一个文件名,例如:请输入存储到的文件名: userlist.txt 4、在整个上述过程中,要做例外处理;如果文件创建成功,则给出提示信息。 public class test1 { public static void main(String[] args) { T1(); } public static void T1() { FileWriter out ; BufferedWriter bw; String fileName = null; String message = null; Scanner scanner = new Scanner(System.in); System.out.print(\"请输入存储到的文件名:\"); fileName = scanner.next(); try { out = new FileWriter(fileName); bw = new BufferedWriter(out); System.out.print(\"\\n文件创建成功!\\n请输入姓名和学号信息:\"); while( !(message = scanner.next()).equalsIgnoreCase(\"quit\")) { bw.write(message); bw.newLine(); } bw.close(); out.close(); } catch(Exception e) { System.out.println(\"文件创建失败!\"); } }} 第三题: 编写一个程序,用于从第二题存储的磁盘文件中读出信息,并显示在屏幕上。 要求: 1、文件名从键盘输入; 2、姓名和学号分开显示,例如屏幕显示如下信息: 文件userlist.txt中存储的姓名有: 张三 李四 王五 ...... 文件userlist.txt中存储的学号有: 20061215 20061317 20061425 import java.util.Scanner; import java.io.*; public class test2 { public static void main(String[] args) { T2(); } public static void T2() { FileReader read; BufferedReader in ; Scanner scanner = new Scanner(System.in); String fileName = null; String message = null; String[] buf = new String[2]; String[] name = new String[10]; String[] number = new String[10]; int pos1 = 0; int pos2 = 0; System.out.print(\"请输入要读取的文件名:\"); fileName = scanner.next(); try { read = new FileReader(fileName); in = new BufferedReader(read); while((message = in.readLine()) != null) { buf = message.split(\" \"); name[pos1++] = buf[0]; ..... number[pos2++] = buf[1]; buf = new String[2]; } } catch(Exception e) { System.out.println(\"该文件不存在!\"); } System.out.println( \"屏幕显示如下信息:\"); System.out.print(\"文件\"+fileName+\"中存储的姓名有:\"); for(int i = 0; name[i] != null;i++) { System.out.print(name[i]+\" \"); } System.out.print(\"\\n文件\"+fileName+\"中存储的学号有:\"); for(int i = 0; number[i] != null;i++) { System.out.print(number[i]+\" \"); } }} 第四题: 编写程序,列出当前目录下所有后缀为 .txt和.doc的文件。 import java.io.File; import java.util.ArrayList; import java.util.List; public class file { /** * @param args */ public static void main(String[] args) { Jiaogu f = new Jiaogu(); List System.out.println(ff.getPath()); } } public List for (File f : fs) { if (f.isFile()) { if (fileType .equals(f.getName().substring( f.getName().lastIndexOf(\".\") + 1, f.getName().length()))) lfile.add(f); } else { List return lfile; } } 第五题: 编写程序,实现文件拷贝功能:即按照用户输入的文件名实现把第一个文件的内容拷贝到第二个文件中。 import java.io.*; public class Copy { public static void main(String args[]){ if(args.length!=2){ System.out.println(\"参数不正确,无法完成复制!正确用法:\"); System.out.println(\"java Copy 源文件名 目的文件名\"); System.exit(0); } copyFile(args[0],args[1]); } public static void copyFile(String src,String obj){ FileInputStream fis=null; FileOutputStream fos=null; try{ fis=new FileInputStream(src); fos=new FileOutputStream(obj); }catch(FileNotFoundException e){ System.out.println(\"文件不存在,请检查您的输入:\"); }catch(IOException e){ e.printStackTrace(); } try{ int b; while((b=fis.read())!=-1){ fos.write(b); } fos.flush(); System.out.println(\"文件复制成功!\"); }catch(IOException e){ System.out.println(\"文件写入错误!\"); } } } 第六题: 编写应用程序,可以把从键盘输入的字符串读到数组中,并在屏幕上逆序输出。(要求用流的方式实现)。 import java.util.*; public class laji1 { public static void main(String[] args) { int n=100; Scanner scanner = new Scanner(System.in); System.out.print(\"请输入字符串: \"); String yy = scanner.nextLine(); StringTokenizer fenxi1 = new StringTokenizer(yy,\" \"); String str[] = new String[n]; for(int i=0;fenxi1.hasMoreTokens();i++){ str[i]=fenxi1.nextToken(); } for(int i=n-1;i>=0;i--){ if(str[i]!=null) System.out.print(str[i]+\" \"); } } } Scanner scanner = new Scanner(System.in); System.out.print(\"请输入字符串: \"); String yy = scanner.nextLine(); StringTokenizer fenxi1 = new StringTokenizer(yy); int n=fenxi1.countTokens(); String str[] = new String[n]; for(int i=0;fenxi1.hasMoreTokens();i++){ str[i]=fenxi1.nextToken(); } for(int i=n-1;i>=0;i--){ System.out.print(str[i]+\" \"); } 第七题 编写应用程序,利用DataOutputStream和DataInputStream实现将Java中基本数据类型写入到一个文件和按照java基本数据类型读入到程序并打印到屏幕的功能。 public class TestClass { public static void main(String[] args) throws Exception { TestClass t = new TestClass(); t.write(); t.read(); } public void write() throws Exception { String path = this.getClass().getClassLoader().getResource(\"test.txt\").toURI().getPath(); OutputStream os = new FileOutputStream(path); DataOutputStream dos = new DataOutputStream(os); dos.writeDouble(Math.random()); dos.writeBoolean(true); dos.writeInt(1000); dos.writeInt(2000); dos.flush(); os.close(); dos.close(); } public void read() throws Exception { InputStream instream = this.getClass().getClassLoader().getResourceAsStream(\"test.txt\"); DataInputStream dis = new DataInputStream(instream); double d = dis.readDouble(); boolean b = dis.readBoolean(); // 先写的先被读出来 int i1 = dis.readInt(); int i2 = dis.readInt(); instream.close(); dis.close(); System.out.println(d); System.out.println(b); System.out.println(i1); System.out.println(i2); } } 第八题 编写应用程序,创建一个RandomAccessFile类的对象,实现将Java中基本数据类型写入到文件和按照java基本数据类型读入到程序并打印到屏幕的功能。 public class TestClass { public static void main(String[] args) throws Exception { RandomAccessFile raf = null; 建 String fileDirAndName = \"e:/files/demo.txt\"; // 文件目录及名称 File file = new File(fileDirAndName); // 创建欲操作的文件对象,此文件不存在则进行创raf = new RandomAccessFile(file,\"rw\"); // 创建随机访问读写rw的文件流 int num = 65535; raf.writeInt(num); // 写入一个int类型数据 raf.close(); // 关闭流 RandomAccessFile raf2 = null; String fileDirAndName2 = \"e:/files/demo.txt\"; // 文件目录及名称 File file2 = new File(fileDirAndName2); // 创建欲操作的文件对象 raf2 = new RandomAccessFile(file,\"r\"); // 创建随机访问输入r文件流 int result = raf2.readInt(); // 从文件中读取一个int类型数据 System.out.println(\"这个int类型数据是:\"+result); raf2.close(); } } 第九题 编写程序: 1、实现将从键盘输入字符串按照Ascii码输入到一个文本文件中的功能; 2、从1中所生成文本文件中读入Ascii编码的数据读入到程序并转化成字符串然后输出到屏幕上。 import java.io.*; public class FileWrite { public static void main(String args[]){ BufferedReader br=null; BufferedWriter bw=null; BufferedReader br1=null; try { br=new BufferedReader(new InputStreamReader(System.in));//字符输入流 从键盘读取数据 bw=new BufferedWriter(new FileWriter(\"D:/temp/title.txt\"));//字符输出流 写数据到文件 br1=new BufferedReader(new FileReader(\"D:/temp/title.txt\"));//字符输入流 从文件读取数据 str=(byte)String.charAt(int); str=br.readLine(); bw.write(str); bw.flush(); System.out.println(br1.readLine()); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); bw.close(); br1.close(); } catch (IOException e) { e.printStackTrace(); } } } } 第十题: 编写程序,实现从键盘上输入一个算数表达式,程序自动计算其值并输出到屏幕的功能。例如输入表达式5*4,自动计算并输出其值20。 因篇幅问题不能全部显示,请点此查看更多更全内容