Java面试--io

来源:互联网 发布:淘宝上如何找牙签弩 编辑:程序博客网 时间:2024/06/10 17:33

(1)

题目:给出一个整数数组,将其写入一个文件,再从文件中读出,并按整数大小逆序打印。

这道面试题是我看了好多面试题后自己编的,希望能对将要面试的人有点帮助。

对于我这个新手来说,觉得这个题目考察的基础东西还是比较多的:

1.对文件的写入和读出方面的考察

2.对不同形的数组转换方面的考察

3.对string基本用法的考察(split,substring)

4.类型转换的考察

5.对算法的考察(排序)

ps:我写的这个题目肯定有其他更好的方法,我这个就算是一个笨方法了,由于我编程功力还不深厚,而且写下面的这些代码借助了myEclipse这样先进的IDE工具,还时不时的上baidu ,google搜索一下,但在笔试的时候全屏记忆在纸上写,这样难度可想而知。看来基础真的很重要

Java代码  收藏代码
  1. package com.xyq.demo;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.InputStreamReader;  
  9. import java.io.OutputStreamWriter;  
  10.   
  11. /** 
  12.  *  
  13.  * @author xyq 
  14.  * 
  15.  * 作用:一道面试题 
  16.  */  
  17. public class T1 {  
  18.     /** 
  19.      * 把数组写入文件中 
  20.      * @throws IOException 
  21.      */  
  22.     void writefile() throws IOException {  
  23.         String str = "";  
  24.         FileOutputStream fos = new FileOutputStream("Result.txt");  
  25.         OutputStreamWriter osw = new OutputStreamWriter(fos);  
  26.         BufferedWriter bw = new BufferedWriter(osw);  
  27.         int[] intArr = new int[] { 10, -101,25346 };  
  28.         //注意在这里输入到文件中的是字符串类型String而不是数组类型  
  29.         for (int i = 0; i < intArr.length; i++) {  
  30.             str += intArr[i] + ",";  
  31.         }  
  32.         str = str.substring(0, str.length()-1);  
  33.         bw.write(str);  
  34.         bw.close();  
  35.     }  
  36.     /** 
  37.      * 把数组从文件中读出来,并排序 
  38.      * @throws IOException 
  39.      */  
  40.     void readfile() throws IOException {  
  41.         String str = "";  
  42.         String str1 = "";  
  43.         FileInputStream fis = new FileInputStream("Result.txt");  
  44.         InputStreamReader isr = new InputStreamReader(fis);  
  45.         BufferedReader br = new BufferedReader(isr);  
  46.         //从文件中读出字符串String类型  
  47.         str = br.readLine();  
  48.         //把字符串转换成数组类型,再进行排序  
  49.         String[] strArr = str.split(",");  
  50.         //把String数组转换成int数组  
  51.         int[] intArr=new int[strArr.length];  
  52.         for(int i=0;i<strArr.length;i++){  
  53.            intArr[i]=Integer.parseInt(strArr[i]);  
  54.         }  
  55.         sort(intArr);  
  56.         for (int i = 0; i < intArr.length; i++) {  
  57.             str1 += intArr[i]+",";  
  58.         }  
  59.         str1 = str1.substring(0, str1.length()-1);  
  60.         System.out.print(str1);  
  61.         br.close();  
  62.     }  
  63.     /** 
  64.      * 冒泡排序算法 
  65.      * @param data 
  66.      */  
  67.     public static void sort(int[] data) {  
  68.         int temp;  
  69.         for (int i = 0; i < data.length; i++) {  
  70.             for (int j = data.length - 1; j > i; j--) {  
  71.                 if (data[i] < data[j]) {  
  72.                     temp = data[i];  
  73.                     data[i] = data[j];  
  74.                     data[j] = temp;  
  75.                 }  
  76.             }  
  77.         }  
  78.     }  
  79.     /** 
  80.      * main方法 
  81.      * @param args 
  82.      * @throws IOException 
  83.      */  
  84.     public static void main(String[] args) throws IOException {  
  85.         new T1().writefile();  
  86.         new T1().readfile();  
  87.     }  
  88. }  

 
运行结果:

在Result.txt中为:10,-101,2,5,3,4,6

控制台打印为:10,6,5,4,3,2,-101

 


(2)最近用到一些java.io包中的一些类接口,所以写了一些东西来复习。

Input和Output是同一类,而Reader和Writer另属同一类

 

Reader支持16位的Unicode字符的输出,而InputStream只支持8位字符输出。他们的大概结构如下:

 

InputStream的子类有:

               FileInputStream,FilterInputStream,ObjectInputStream,StringBufferInputStream等

OutputStream的子类有:

               ByteArrayOutputStream,FileOutputStream,FilterOutputStream,PipedOutputStream,ObjectOutputStream。

 

Reader的子类有:BufferdReader,InputStreamReader,FilterReader,StringReader,PipedReader,CharArrayReader。

Writer的子类有: BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter。

 

曾遇到一个面试题:

请选择下面的这却答案:

 

a. System.out 是一个PrintStream。

b. System.out 是一个OutputStream。

c. System.out 是一个FilterOutputStream。

d. System.out 不是一个PrintStream。

e. System.out 在异常时,将抛出IOExcepton。

 

由于System.out 是一个PrintStream的一个子类,并且PrintStream对象并没有抛出IOException异常。

所以可以看出答案:a b c

例一:InputStream读取文件的应用:

Java代码  收藏代码
  1. import java.io.FileInputStream;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5.   
  6. <span style="color: #339966;">/** 
  7.  *  
  8.  * @author liugao ec06 cumt 
  9.  * 
  10.  */</span>  
  11. public class TestJavaIo {  
  12.   
  13.     <span style="color: #339966;">/** 
  14.      * @param args 
  15.      */</span>  
  16.     public static void main(String[] args) {  
  17.         int b=0;  
  18.         long num=0;  
  19.         InputStream in=null;  
  20.         try {  
  21.             in=new FileInputStream("D:/a.txt");  
  22.         } catch (FileNotFoundException e) {  
  23.             System.out.println("文件找不到");  
  24.             System.exit(-1);  
  25.         }  
  26.         try{  
  27.             while((b=in.read()) !=-1){              <span style="color: #339966;">//b读取是字符的AI码</span>  
  28.                 System.out.println((char)b);  
  29.                 num++;  
  30.             }  
  31.             in.close();  
  32.             System.out.println();  
  33.             System.out.println("共读取了" + num + "个字节");  
  34.               
  35.             }catch(IOException e){  
  36.                 System.out.println("文件读取错误");  
  37.                 System.exit(-1);  
  38.             }  
  39.         }  
  40.     }  

 

例二:FileReader的应用:

Java代码  收藏代码
  1. import java.io.FileNotFoundException;  
  2. import java.io.FileReader;  
  3. import java.io.IOException;  
  4.   
  5. <span style="color: #339966;">/** 
  6.  *  
  7.  * @author ec06cumt 
  8.  * 
  9.  */</span>  
  10. public class TestFileReader {  
  11.   
  12. <span style="color: #339966;">  /** 
  13.      * @param args 
  14.      */</span>  
  15.     public static void main(String[] args) {  
  16.         FileReader fr=null;  
  17.         int c=0;  
  18.         int ln=0;  
  19.         try {  
  20.             fr=new FileReader("D:/a.txt");  
  21.             while((c=fr.read())!=-1){  
  22.                 System.out.println((char)c);  
  23.                 ln++;  
  24.             }   
  25.             fr.close();  
  26.               
  27.             <span style="color: #339966;">//主要这里的ln的值,当有中文字符时,一个中文字符还是算一个,  
  28.             //但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别</span>  
  29.             System.out.println("共有:"+ln+"个字符");  
  30.         } catch (FileNotFoundException e) {  
  31.             e.printStackTrace();  
  32.         }catch (IOException e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36.   
  37. }  

 

 

例三:BufferedReader与BufferWriter的应用:

 

Java代码  收藏代码
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.FileReader;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6.   
  7. <span style="color: #339966;">/** 
  8.  * BufferReader和BufferWriter的应用示例 
  9.  * @author ec06cumt  
  10.  * 
  11.  */</span>  
  12. public class TestBufferedReader {  
  13.   
  14.     <span style="color: #339966;">/** 
  15.      * @param args 
  16.      */</span>  
  17.     public static void main(String[] args) {  
  18.         try {  
  19.             <span style="color: #339966;">//BuffererReader等就像在原来的字节流的基础上套一个更大的水管,  
  20.             //让出水量更大读取的速度更快。</span>  
  21.             BufferedWriter bw=new BufferedWriter(new FileWriter("D:/aa.txt"));  
  22.             BufferedReader br=new BufferedReader(new FileReader("D://aa.txt"));  
  23.             String s=null;  
  24.             for(int i=0;i<=100;i++){  
  25.                 s=String.valueOf(10+(long)(Math.random()*30));  
  26.                 bw.write(s);  
  27.                 bw.newLine(); <span style="color: #339966;">//创建一个换行的标记</span>  
  28.                   
  29.             }  
  30.             bw.flush();     <span style="color: #339966;"//刷新缓冲区域。</span>  
  31.             while((s=br.readLine())!=null){   <span style="color: #339966;">//readLine 就是水管的一个应用吧</span>  
  32.                 System.out.println(s);  
  33.             }  
  34.             bw.close();  
  35.             br.close();  
  36.         } catch (IOException e) {  
  37.             System.out.println("写入错误");  
  38.         }  
  39.     }  
  40.   
  41. }  

 

 例四:DataStream的应用:

Java代码  收藏代码
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.DataInputStream;  
  4. import java.io.DataOutputStream;  
  5. import java.io.IOException;  
  6.   
  7. <span style="color: #339966;">/** 
  8.  *  
  9.  * @author ec06cumt 
  10.  * 
  11.  */</span>  
  12. public class TestDataStream {  
  13.   
  14.     <span style="color: #339966;">/** 
  15.      * @param args 
  16.      */</span>  
  17.     public static void main(String[] args) {  
  18.         ByteArrayOutputStream bos=new ByteArrayOutputStream();  
  19.         DataOutputStream dos=new DataOutputStream(bos);  
  20.         try {  
  21. <span style="color: #339966;">//            dos.writeFloat((float) Math.random());  
  22. //          dos.writeLong((long) Math.random());  
  23. //          dos.writeDouble((double) Math.random());  
  24. //          dos.writeChar((char) Math.random());</span>  
  25.               
  26.             dos.writeShort((short) Math.random());  
  27.             dos.writeBoolean(true);  
  28.             //注意ByteArrayInputStream的构造方法是参数要是一个数组  
  29.             ByteArrayInputStream bais=new ByteArrayInputStream(bos.toByteArray());  
  30.               
  31.             DataInputStream dis=new DataInputStream(bais);  
  32.             System.out.println(dis.available());  
  33.             //System.out.println(dis.readDouble());  
  34. <span style="color: #339966;">//            System.out.println(dis.readInt());  
  35. //          System.out.println(dis.readFloat());  
  36. //          System.out.println(dis.readDouble());  
  37. //          System.out.println(dis.readChar());</span>  
  38.             System.out.println(dis.readShort());  
  39.               
  40.             System.out.println(dis.readBoolean());  
  41.             bos.close();  
  42.             bais.close();  
  43.               
  44.         } catch (IOException e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.     }  
  48.   
  49. }  

 

 例五:ObjectStream的应用

Java代码  收藏代码
  1. import java.io.FileInputStream;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.io.Serializable;  
  8.   
  9. <span style="color: #339966;">/** 
  10.  * 对象的写入和读取 
  11.  * @author ec06cumt 
  12.  * 
  13.  */</span>  
  14. public class TestObjectStream {  
  15.   
  16.     <span style="color: #339966;">/** 
  17.      * @param args 
  18.      */</span>  
  19.     public static void main(String[] args) {  
  20.           
  21.         T t=new T();  
  22.         t.k=10;  
  23.           
  24.         try {  
  25.             FileOutputStream fos=new FileOutputStream("D:/testObjectIo.bak");  
  26.             ObjectOutputStream oos=new ObjectOutputStream(fos);  
  27.             oos.writeObject(t);  
  28.             oos.flush();  
  29.             oos.close();  
  30.               
  31.             FileInputStream fis=new FileInputStream("D:/testObjectIo.bak");  
  32.             ObjectInputStream bis=new ObjectInputStream(fis);  
  33.             T tReader= (T) bis.readObject();  
  34.             System.out.println(tReader.i + " " +tReader.j + " "+tReader.d + " " + tReader.k);  
  35.               
  36.         } catch (FileNotFoundException e) {  
  37.             e.printStackTrace();  
  38.         }catch(IOException e1){  
  39.             e1.printStackTrace();  
  40.         }catch(ClassNotFoundException e2){  
  41.             e2.printStackTrace();  
  42.         }  
  43.     }  
  44.       
  45. }  
  46.   
  47. class T implements Serializable{  
  48.     int i=2;  
  49.     int j=4;  
  50.     double d=2.5;  
  51.     transient int k=15;  
  52. //   int k=15;  
  53. }  

 

 

 

 例六:文件的目录复制

 

 

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9.   
  10. public class JavaIoCopyFile {  
  11.   
  12.     <span style="color: #339966;">/** 
  13.      * Author:liugao ec06-2 cumt 
  14.      * @param args 
  15.      */</span>  
  16.     public static void main(String[] args) {  
  17.           
  18.         File sourceFile=new File("D:/test");  
  19.         File targetFile=new File("F:/jstl");  
  20.         copy(sourceFile,targetFile);  
  21.           
  22.     }  
  23.   
  24.     private static void copy(File sourceFile, File targetFile) {  
  25.         File tarpath=new File(targetFile,sourceFile.getName());  
  26.         if(sourceFile.isDirectory()){  
  27.             tarpath.mkdir();  
  28.             File[] dir=sourceFile.listFiles();  
  29.             for(int i=0;i<dir.length;i++){  
  30.                 copy(dir[i],tarpath);  
  31.             }  
  32.         }else{  
  33.             try {  
  34.                 InputStream is=new FileInputStream(sourceFile);  
  35.                 OutputStream os=new FileOutputStream(tarpath);  
  36.                   
  37.                 byte[] buf=new byte[1024];  
  38.                 int len=0;  
  39.                 while((len= is.read(buf))!=-1){  
  40.                     os.write(buf);  
  41.                 }  
  42.                 System.out.println("复制完成");  
  43.                 is.close();  
  44.                 os.close();  
  45.                   
  46.             } catch (FileNotFoundException e) {  
  47.                 e.printStackTrace();  
  48.             }catch(IOException e1){  
  49.                 e1.printStackTrace();  
  50.             }  
  51.         }  
  52.     }  
  53.       
  54.       
  55.   
  56. }  

 

 

 

 常用的也就是这些方法吧。。。。

 


原创粉丝点击