java 基础试题及答案(自己的理解)

来源:互联网 发布:sql注入绕过登录 编辑:程序博客网 时间:2024/04/29 10:37

1、给定如下JAVA程序片断: class A{ public A(){ system.out.println(A); } } class B extends A{ public B(){System.out.println(B);} public static void main(String[] args){ B b=new B();} } 上述程序将( ).(选择一项) 

[答案B]

   A不能通过编译

   B、通过编译,输出为: A B

   C、通过编译,输出为: B

   D、通过编译,输出为: A

 2、某一 java程序中有如下代码: Datalnputstream din=new DataInputstreamnew BufferedInputstream (new FileInputstream(employee.dat) )); 假设在employee.dat文件中只有如下一段字符:abcdefg。则:System.out.println(din)在屏幕上打印().(选择一项)

[答案:]

   AA

   BB

   C97

   D98

 3、给定java代码片段,如下: int i=0,j=-1; switch(i){ case 0,1:j=1; case 2:j=2; } System.out.print("j="+j); 编译运行,正确的是()。(选择一项)

[答案:A,如果写成int i=0,j=-1; switch(i){ case 0:j=1; case 1:j=1; case 2:j=2; }System.out.print("j="+j);则输出结果为j=2;另外如果按照正规写法,在case后加上break,则输出结果为j=1]

   A、程序编译出错 

   Bj=1

   Cj=2

   Dj=0

 4、在Java中,下面关于构造函数的描述正确的是()。(选择一项)

[答案:D]

A、类必须有显式构造函数(系统默认会给没有定义构造函数的类加一个构造函数,是隐藏的)

   B、它的返回类型是void(虽然构造函数确实不返回任何值,但是却不代表它就是void类型)

   C、它和类有相同的名称,但它不能带任何参数(很明显,构造函数是可以有参数的)

   D、以上皆非

 5JAVA编程中,Swing包中的组件处理事件时,下面()是正确的。(选择一项)

[答案:]

   A Swing包中的组件也是采用事件的授权得理模型来处理事件的

   B Swing包中组件产生的事件类型,也都带有一个J字母,如:JmouseEvent

   CSwing包中的组件也可以采用事件的传递处理机制

   D Swing包的组件所对应的事件适配器也是带有J字母的,如:JmouseAdapter

 6Public class EqTest { public static void main(String args[]){ EqTest e=new EqTest(); } EqTest(){ String s="Java"; String s2="java"; //在这儿放置测试代码 {System.out.println("相等");} else {System.out.println("不相等");} } } 在上面的Java代码的注释行位置,放置()测试代码能输出“相等”结果。(选择一项)

[答案:C,这里需要注意的是ss2的大小写并不一样,因此不是用equals来判断]

   Aif(s==s2)

   Bif(s.equals(s2))

   Cif(s.equalsIgnoreCase(s2))

   Dif(s.noCaseMatch(s2))

 7在类的说明符中,被指定为私有的数据可以被以下()访问。(选择一项)

[答案:C,私有数据只能被所在类中的成员函数使用]

   A、程序中的任何函数

   B、其他类的成员函数

   C、类中的成员函数

   D、派生类中的成员函数

 8JAVA编程中,以下()命令用来执行java类文件。(选择一项)

[答案:Bjavac是用来编译.java文件的,java是用来执行.class文件的]

   Ajavac

   Bjava

   Cappletviewer

   D、以上所有选项都不正确

 9Java中,下面的方法可以正确的创建一个Swing标签组件是()(选择两项) 

[答案:]

   AImageIcon icon = new ImageIcon(

   BImageIcon icon = new ImageIcon(

   CImageIcon icon=new ImageIcon(

   DJLabel label=new JLabel(SwingConstants.LEFT);

 10、分析下面的用Java语言编写的trythis()方法: public void trythis(){ try{ System.out.print("a"); problem(); }catch(RuntimeException e){ System.out.print("b"); }catch(Exception e){ System.out.print("c"); }finally{ System.out.print("d"); } System.out.print("e"); }当该方法被调用时,如果其中的problem()方法引发一个RuntimeException类的异常,那么输出结果将是()。(选择一项) 

[答案:C]我个人分析认为是C,但是又没有100%把握,如果与我的答案不同,请说明看法。

   Aabcde

   Babd

   Cabde

   Dabe

 11 public class MyClass1{ public static void main (String argv[]){} _____ class MyInner {} }在以上java代码中的横线上,可放置()修饰符。(选择三项) 

[答案:D]

   Apublic

   Bprivate

   Cstatic

   Dfriend

 12public class test3{ public static void main(String args[]){ for{int I=0;I<3;I++}{ for{int j=3; j>0;j--}{ If(I==j) continue; System.out.print}n(I=+I+j=+j) } } } } 上面的JAVA代码编译运行后,下列选项中,()会出现在输出结果中,(选择三项) 

[答案:ADE,根据判断条件,不可能有IJ值相同的答案]

   AI=0 j=3

   BI=0 j=0

   CI=2 j=2

   DI=0 j=2

   EI=1 j=2

 13、如下Java代码段,体现了()概念。(选择一项) ..... public void aMethod(String s){....} public void aMethod(int i){.........} public void aMethod(int I,float f){.....} .....

[答案:B,请注意,这里不是多态,仅仅是参数不同的方法体现的是重载的概念,而只有方法名一样,参数一样,体现的就是重写的概念,而实际上重载和重写都是多态的表现形式,因此这里不能选择多态]

   A、多继承

   B、重载

   C、重写 

   D、多态

 14java语言中,下列时处理输出操作的所有类的基础的是()(选择一个)

[答案:BInputStreamOutputStream类是所有Java字节流的父类,方法有1int read():读入;2void close():关闭;3void write():写入;4viod flush():强制清空缓存。而ReaderWriter类则是所有Java字符流的父类,方法有1int read():读入;2void close():关闭;3void write():写入;4viod flush():强制清空缓存。相应简单来说,处理的是byte类型就是字节流,用InputStreamOutputStream类,如果处理的是char类型就是字符流,相应的处理类就是ReaderWriter]

   ADataOutput

   BOutputStream

   CBufferedOutputStream

   DIOStream

 15、在jave中,类Worker是类Person的子类,Worker的构造方法中有一句”super(),该语句)。(选择一项)

[答案:C]

   Aa)调用类Worker中定义的super()方法

   Bb)调用类Person中定义的super()方法

   Cc)调用类Person的构造函数

   Dd)句法错误

 16、在Java中,关于final关键字的说法正确的是()。(选择两项)

[答案:C]

   A、如果修饰变量,则一旦赋了值,就等同一个常量

   B、如果修饰类,则该类只能被一个子类继承

   C、如果修饰方法,则该方法不能在子类中被覆盖

   D、如果修饰方法,则该方法所在的类不能被继承

 17、在Java,下列选项表示字符”a”值的是().(选择一项)

[答案:A"a"的描述方法是表示一个字符串,而不是字符]

   A'a'

   B"a"

   Cnew Character(a)

   D/000a

 18、给定java代码片段,如下: Integer a = new Integer(3); Integer b = new Integer(3); System.out.println(a==b); 运行后,这段代码将输出()。(选择一项)

[答案:B,这里需要注意的是,ab均为对象,而对象的对比用==显然是不合适的,因为对比的是内存地址,那将永远是false,如果用.equals来对比,则是true,但是换种写法,Integer a = 3; Integer b = 3; System.out.println(a==b);结果却是true,甚至写成int a = 3; Integer b = 3; System.out.println(a==b);其结果也是true,这里的原因值得研究一下,难道是因为后两种写法比较的是他们的值,而且同样的类型(intInteger的子集?)允许了他们的比较?]

   Atrue

   Bfalse

   C0

   D1

 19Java程序中读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于10,使用throw语句显式地引发异常,异常输出信息为“somethings wrong!”,语句为()。(选择一项)

[答案:C]

   Aif (I>10) throw Exception(somethings wrong!”);

   Bif (I>10) throw Exception e (somethings wrong!”);

   Cif (I>10) throw new Exception(somethings wrong!”);

   Dif (I>10) throw new Exception e (somethings wrong!”);

 20、给定两个java程序,如下:Text.java的编译运行结果是(). (选择一项) pubilc interface Face{ int count=40; } pubilc class Text implements Face{ private static int counter; pubilc static void main(String[]args){ System.out.println(++counter); } }

[答案:D,这个题目很奇怪,后面执行的程序与其继承的Face却没有关系,打印的是++counter值而不是count,而private static int counter定义的默认值是0,因此选择D]

   A40

   B41

   C0

   D1

 21、给定一个Java程序代码,如下:运行编译后,输出结果是(). (选择一项) pubilc class Test{ int count = 9; pubilc void count1(){ int count = 10; SYstem.out.println("count1"+count); } pubilc void count2(){ SYstem.out.println("count2"+count); } pubilc static void main(String args[]){ Test t =new Twst(); t.count1(); t.count2(); } }

[答案:B,这里需要注意两个方法分别调用的是局部变量和全局变量,虽然这样写是java允许的,但是实际写代码时,不建议这样写,容易造成程序误读,可读性并不好]

   Acount1=9 count2=9

   Bcount1=10 count2=9

   Ccount1=10 count2=10

   Dcount1=9 count2=10

 22、给定java代码如下:要使用这段代码能够编译成功,横线处可以填入().(选择两项) pubilc int count(char c,int i,double d){ return______; }

[答案:AB,需要注意char类型的特殊用法,以及类型的转换原理]

   Ac*i

   Bc*(int)d

   C(int)c*d

   Di*d

 23 JAVA编程中,Java编译器会将Java程序转换为()。(选择一项)

[答案:B,个人认为是B,并不确定,如果有不同见解,请说明]

   A、字节码

   B、可执行代码

   C、机器代码

   D、以上所有选项都不正确

 24、在J2EE中,下列元素经过排序的集合类是()。(选择一项)

[答案:C]

   ALinkedList

   BStack

   CHashtable

DTreeSet

259)分析下面的Java程序: public class yy { public static void main(String[] ards) throws Exception { try { throw new Exception(); }catch(Exception e){ System.out.println("Caught in main()"); } System.out.println("nothing"); } }输出结果为()。(选择一项) 

[答案:A,理解异常处理机制就可以了]

   ACaught in main() nothing

   BCaught in main()

   Cnothing

   D、没有任何输出

 26、编译并运行下面的Java代码段: char c='a'; switch (c) { case 'a': System.out.println("a"); default: System.out.println("default"); }输出结果是()。(选择一项) 

[答案:B,原因与之前一样,注意没有break语句]

   A、代码无法编译,因为switch语句没有一个合法的表达式

   Ba default 

   Ca

   Ddefault

 27、在Java中,执行下面的语句后,c的值为()。(选择一项) String s= "Jessica "; char c=s.charAt(6); 

[答案:DcharAt命令似乎是专门取得字符串s的第几个字母,字符串的位置是0开始的,因此s.charAt(6)即是第七位,也就是字符’a’]

   Anull

   B' '

   C'c '

   D'a '

 28、在J2EE中,下面的代码中出现编译错误的是()。(选择一项)

[答案:D,虽然我不是很清楚前面3个具体的写法是不是对的,但是我认为作为一个OUT来说,虽然设定了Out的文件名,但是却不指定输出的物理位置,似乎是不对的]

   AFile f = new File("/","autoexec.bat");

   BDataInputStream din = new DataInputStream(new FileInputStream("autoexec.bat"));

   CInputStreamReader in = new InputStreamReader(System.in);

   DOutputStreamWriter out = new OutputStreamWriter(System.in); 

 2938.JavaSwing编程中,要获取每次选择的JComboBox对象的选项值,可以使用()类型的监听器. (选择两项) 

[答案:]

   AActionListener

   BltemListener

   CKeyListener

   DSelectionListener

 30、在Java中,下面关于包的陈述中正确的是()。(选择两项)

[答案:BD,个人如此认为,有不同意见可以注明]

   A、包的声明必须是源文件的第一句代码

   B、包的声明必须紧跟在import语句的后面

   C、只有公共类才能放在包中

   D、可以将多个源文件中的类放在同一个包中

 31、在Java中,要想使只有定义该类所在的包内的类可以访问该类,应该用()关键字。(选择一项)

[答案:D]

   A、不需要任何关键字

   Bprivate

   Cfinal

   Dprotected

 32、包pack1的类class1中有成员方法: protected void method_1(){} private void method_2(){}, public void method_3(){}void method_4(){},在包pack2中的类class2class1的子类,你在class2中可以调用方法()。(选择两项) 

[答案:CD]

   Amethod_1

   Bmethod_2

   Cmethod_3

   Dmethod_4

 33、在Java语言中,小明在他的包mypackage中定义了类My_Class,在mypackage的子包mysubpackage中也有个类My_Class。小明用.import mypackage:引入包,执行其中的语句:My_Class NewClass=New My_Class();时,将发生()。(选择一项)

[答案:C,报错,JAVA不知道引用哪个包,有重名]

   A、创建一个类mypackage.My_Class对象

   B、创建一个类mypackage. Mysubpackage.My_Class的对象

   C、该语句是错误的

   D、创建一个类mypackage.My_Class的对象和一个类mypackage. Mysubpackage.My_Class的对象

 3441.JavaSwing编程中,给定一个java程序main方法的代码片段如下: JFrame jf=new JFrame(); jf.getContentpane().setLayout(null); jf.setSize(200,200); jf.setVisible(true); //a要在界面上显示如下组件,则应在A处填入(). (选择一项) 

[答案:]

   AJTextArea text = text JTextArea(100,100);text.setBounds(10,10,150,100);jf.getContentpane().add(text);

   BJTextField text = text JTextField(100,100);JScrollpane text=new JScrollpane(text);jf.setBounds(10,10,150,100);jf.getContentpane().add(jp);

   CJTextArea text = new JTextArea(100,1);JScrollpane jp=new JScrollpane(text);jp.setBounds(10,10,150,100);jf.getContentpane().add(jp);

   DJTextArea text = new JTextArea(100,100);JScrollpane jp=new JScrollpane(text);jp.setBounds(10,10,150,100);jf.getContentpane().add(jp);

 35、在JAVA语言中,你的按钮要实现下面的功能:当鼠标按下按钮时,显示“鼠标已按下”;当释放按键时,显示“鼠标已释放”。你必须具体定义接口MouseListener的()方法。(选择两项)

[答案:DEmousePressed()当用户按下鼠标按钮时发生. mouseReleased() 当用户松开鼠标按钮时发生. mouseClicked()当用户按下并松开鼠标按钮时发生.用户在选择或双击图标的时候通常会点击鼠标按钮. 用户如果在松开鼠标之前移动鼠标,点击不会导致鼠标相应事件出现. 因为点击鼠标是按下鼠标和松开鼠标的结合, 在事件分配给 mouseClicked()方法之前, mousePressed() mouseReleased()方法已同时被调用.  mouseEntered() 当鼠标离开当前组件并进入你所监听的组件时激活事件. mouseExited() 当鼠标离开你所监听的组件时发生.mouseDragged()当用户按下鼠标按钮并在松开之前进行移动时发生.mouseDragged()后松开鼠标不会导致mouseClicked(). mouseMoved() 当鼠标在组件上移动而不时拖动时发生,其他详细可以参考文档:JAVA的鼠标事件。]

   AmouseClicked

   BmouseEntered

   CmouseExited

   DmousePressed

   EmouseReleaseed

 36JAVA中,为了辨别用户关闭窗口的时间,要实现监听器接口()。(选择一项)

[答案:]

   AMouseListener

   BActionListener

   CWindowListener

   D、以上都要

 37、在Java语言中,当一个类的某个变量声明为protected时下列说法正确的是()。(选择两项) 

[答案:CDprotected访问修饰符表示如果两个类在同一个包中,那么被修饰为protected方法或属性可以被其它的类所访问。但是如果两个类不在同一个包中,被修饰为protected的类只能被有继承关系的类(子类)所访问;没有继承关系的类不能访问。public (友好)是限制级最小的,只要被修饰为public ,不管是不是同一个包,或者同一个类,有没有继承关系都可以被访问。]

   A、只有同一类中的成员才能访问它

   B、不同包中的任何其他类都能够访问它

   C、同包中的任何其他类能够访问它

   D、不同包中的子类可以访问该变量

 38、在Java事件处理模型中,当按下鼠标按钮时,处理()事件。(选择一项)

[答案:C,解释同35]

   AmouseReleased

   BmouseExited

   CmousePressed

   DmouseDown

 39 String s1=new String(Hello); String s2=new String(there); String s3=new String("0"); 上面是JAVA程序的一些声明,以下选项中能够通过编译的是()。(选择一项) 

[答案:A,对于字符串的连接应该没有什么好说的]

   Aa) s3=s1+s2

   Bb) s3=s1&s2

   Cc) s3=s1||s2

   Dd) s3=s1&&s2

 40、在Java中,调用Math.random()方法可能返回的结果是()。(选择一项)

[答案:BMath类的random方法:返回带正号的double值,大于或等于0.0,小于1.0]

   A132.34

   B0.342

   C29.34E10

   D1.0009

 41Java语言中,Panel默认的布局管理器是()。(选择一项)

[答案:BFlowLayoutPanel类和Applet类的默认布局管理器BorderLayoutWindow/Dialog类和Frame类的布局管理器]

   ABorderLayout

   BFlowLayout

   CGridLayout

   DGridBagLayout

 42public class MyClass1 { public static void main(String argv[]){} ______class MyInner{} }在以上Java代码的横线上,可放置()修饰符。(选择两项)

[答案:AB,说了无数次了,如果还不会那也太说不过去了,前面还可以修饰protected]

   Apublic

   Bprivate

   Cimplements

   Dfriend

 43、在java中,下列赋值语句正确的是()。(选择二项)

[答案:ACD,汗一个,难道是我看花了眼,明明是3个正确答案啊,或者说这个题目实在太古老了,以至于现在的JDK1.4以上版本支持很多写法了而原来并不支持?]

   Achar c='a';

   Bchar c="a";

   Cchar c=97;

   Dchar c=new Character('a');

 44、与传统的过程编程不同,面向对象方法的主要思想是()。(选择两项)

[答案:BD,面向对象编程的根本:万事万物皆是对象,理解oop的人不用多说了]

   A、真实反映用户的实际需求

   B、将现实世界的一切抽象为实体或对象

   C、将现实世界细分为一个过程化实现

   D、将软件组织成为对象的集合,将数据结构和行为结合在一起

 45、在Java中,根据你的理解,下列方法()可能是类Orange的构造方法。(选择3)

[答案:ABD]

   AOrange(){}

   BOrange(…){…}

   CPublic void Orange(){}

   DPublic Orange(){}

   EPublic Orange Constuctor(){}

 4645.Java,()借口位于集合框架的顶层.    (选择一项) 

[答案:B,这个答案并不确定,但是基于对三层结构的理解,我认为是控制器层为顶层,同时其他三个答案也完全不靠边,排除法得到的答案]

   AMap

   BCollection

   CSet

   DList

 47、给定某java程序片段,如下: int i=1; int j=i++; if((i>++j)&&(i++==j)) i+=j; System.out.println(i); 该程序运行后,i的输出结果为()。(选择一项)

[答案:B,典型的对于i++++i用法的考验,需要注意的是,在int j=i++这句中,i值已经改变成为了计算后的结果,虽然没有明显的赋值语句,但是实际上i值在这一步之后已经变成了2,而在条件判断中,因为条件i>++j是并不成立的,因此到这一步后面的代码都没有执行,然而需要注意,此时,虽然条件不成立了,但是j值一样做了++j这个运算,此时的j值也是2]

   A1

   B2

   C3

   D4

 48、在Java中,假设我们有一个实现ActionListener接口的类,以下方法中()能够为一个Button类注册这个类。(选择一项)

[答案:CActionListener,用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法]

   AaddListener()

   BaddActionListener()

   CaddButtonListener()

   DsetListener()

 49、在JAVA中的布局管理器,以下说法中错误的是(). (选择一项)

[答案:]

   AFlowLayout以由上到下的方式从左到右排列组件

   BBorderLayout使用 ""."西".""."","居中"来指定组件的位置

   CGridLayout可以创建网格布局,网格布局中各组的大小可以任意调整

   D、可以通过容器的setLayout方法为容器指定布局管理

 50、研究下面的Java代码: public class testException{ public static void main(String args[]){ int n[]={0,1,2,3,4}; int sum=0; try { for(int i=1;i<6;i++) sum=sum+n[i]; System.out.println("sum="+sum); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("数组越界"); } finally{System.out.println("程序结束");} } }输出结果将是()。(选择一项)

[答案:C,简单的异常捕获和处理,需要注意的是,根据各种可能出现的不同错误,catch后的方法也会不同,对比数组等数字处理的错误一般是用ArrayIndexOutOfBoundsException,但是例如对于文件流处理异常则用java.io.IOException,对于一般的SQl语句的错误则采用java.sql.SQLException来进行处理]

   A10数组越界程序结束

   B10程序结束

   C、数组越界程序结束

D、程序结束

 

 

对第28题的系统说明

如何应用DataInputStream进行文件操作

彻底明白JavaIO系统 

一. InputOutput
1. stream
代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在JavaIO中,所有的stream(包括InputOut stream)都包括两种类型:
1.1 
以字节为导向的stream
以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:
1) input
 stream
1) ByteArrayInputStream
:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream
:把一个String对象作为InputStream
3) FileInputStream
:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream
:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream
:把多个InputStream合并为一个InputStream
2) Out
 stream
1) ByteArrayOutputStream
:把信息存入内存中的一个缓冲区中
2) FileOutputStream
:把信息存入文件中
3) PipedOutputStream
:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream
:把多个OutStream合并为一个OutStream
1.2 
Unicode字符为导向的stream
Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:
1) Input
 Stream
1) CharArrayReader
:与ByteArrayInputStream对应
2) StringReader
:与StringBufferInputStream对应
3) FileReader
:与FileInputStream对应
4) PipedReader
:与PipedInputStream对应
2) Out
 Stream
1) CharArrayWrite
:与ByteArrayOutputStream对应
2) StringWrite
:无与之对应的以字节为导向的stream
3) FileWrite
:与FileOutputStream对应
4) PipedWrite
:与PipedOutputStream对应
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。
1.3 
两种不现导向的stream之间的转换
InputStreamReader
OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream
2. stream
添加属性
2.1 “
stream添加属性的作用
运用上面介绍的Java中操作IOAPI,我们就可完成我们想完成的任何操作了。但通过FilterInputStreamFilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。
如果我们要往一个文件中写入数据,我们可以这样操作:
FileOutStream fs = new FileOutStream(“test.txt”);
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStreamFilterOutStream的子类,为FileOutStream添加我们所需要的功能。
2.2 FilterInputStream
的各种类型
2.2.1 
用于封装以字节为导向的InputStream
1) DataInputStream
:从stream中读取基本类型(intchar等)数据。
2) BufferedInputStream
:使用缓冲区
3) LineNumberInputStream
:会记录input stream内的行数,然后可以调用getLineNumber()setLineNumber(int)
4) PushbackInputStream
:很少用到,一般用于编译器开发
2.2.2 
用于封装以字符为导向的InputStream
1) 
没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
2) BufferedReader
:与BufferedInputStream对应
3) LineNumberReader
:与LineNumberInputStream对应
4) PushBackReader
:与PushbackInputStream对应
2.3 FilterOutStream
的各种类型
2.2.3 
用于封装以字节为导向的OutputStream
1) DataIOutStream
:往stream中输出基本类型(intchar等)数据。
2) BufferedOutStream
:使用缓冲区
3) PrintStream
:产生格式化输出
2.2.4 
用于封装以字符为导向的OutputStream
1) BufferedWrite
:与对应
2) PrintWrite
:与对应
3. RandomAccessFile
1) 
可通过RandomAccessFile对象完成对文件的读写操作
2) 
在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3) 
可以直接跳到文件中指定的位置
4. I/O
应用的一个例子
import java.io.*;
public class TestIO{
public static void main(String[] args)
throws IOException{
//1.
以行为单位从一个文件读取数据
BufferedReader in = 
new BufferedReader(
new FileReader("F://nepalon//TestIO.java" );
String s, s2 = new String();
while((s = in.readLine()) != null)
s2  = s   "/n";
in.close();

//1b. 
接收键盘的输入
BufferedReader stdin = 
new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter a line:";
System.out.println(stdin.readLine());

//2. 
从一个String对象中读取数据
StringReader in2 = new StringReader(s2);
int c;
while((c = in2.read()) != -1)
System.out.println((char)c);
in2.close();

//3. 
从内存取出格式化输入
try{
DataInputStream in3 = 
new DataInputStream(
new ByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte()); 
}
catch(EOFException e){
System.out.println("End of stream" ;
}

//4. 
输出到文件
try{
BufferedReader in4 =
new BufferedReader(
new StringReader(s2));
PrintWriter out1 =
new PrintWriter(
new BufferedWriter(
new FileWriter("F://nepalon// TestIO.out" ));
int lineCount = 1;
while((s = in4.readLine()) != null)
out1.println(lineCount    "
"   s);
out1.close();
in4.close();
}
catch(EOFException ex){
System.out.println("End of stream" ;
}

//5. 
数据的存储和恢复
try{
DataOutputStream out2 = 
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("F://nepalon// Data.txt" ));
out2.writeDouble(3.1415926);
out2.writeChars("/nThas was pi:writeChars/n" ;
out2.writeBytes("Thas was pi:writeByte/n" ;
out2.close();
DataInputStream in5 =
new DataInputStream(
new BufferedInputStream(
new FileInputStream("F://nepalon// Data.txt" ));
BufferedReader in5br =
new BufferedReader(
new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
}
catch(EOFException e){
System.out.println("End of stream" ;
}

//6. 
通过RandomAccessFile操作文件
RandomAccessFile rf =
new RandomAccessFile("F://nepalon// rtest.dat", "rw" ;
for(int i=0; i<10; i )
rf.writeDouble(i*1.414);
rf.close();

rf = new RandomAccessFile("F://nepalon// rtest.dat", "r" ;
for(int i=0; i<10; i )
System.out.println("Value "   i   "
"   rf.readDouble());
rf.close();

rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw" ;
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();

rf = new RandomAccessFile("F://nepalon// rtest.dat", "r" ;
for(int i=0; i<10; i )
System.out.println("Value "   i   "
"   rf.readDouble());
rf.close();
}
}
关于代码的解释(以区为单位):
1
区中,当读取文件时,先把文件内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称缓存字节读取方式)。
1b
区中,由于想以缓存字节读取方式从标准IO(键盘)中读取数据,所以要先把标准IOSystem.in)转换成字符导向的stream,再进行BufferedReader封装。
2
区中,要以字符的形式从一个String对象中读取数据,所以要产生一个StringReader类型的stream
4
区中,对String对象s2读取数据时,先把对象中的数据存入缓存中,再从缓冲中进行读取;对TestIO.out文件进行操作时,先把格式化后的信息输出到缓存中,再把缓存中的信息输出到文件中。
5
区中,对Data.txt文件进行输出时,是先把基本类型的数据输出屋缓存中,再把缓存中的数据输出到文件中;对文件进行读取操作时,先把文件中的数据读取到缓存中,再从缓存中以基本类型的形式进行读取。注意in5.readDouble()这一行。因为写入第一个writeDouble(),所以为了正确显示。也要以基本类型的形式进行读取。
6
区是通过RandomAccessFile类对文件进行操作。

你可以通过这个链接引用该篇文章:http://boluomi123.bokee.com/tb.b?diaryId=10257625

 

 
原创粉丝点击