Java基础面试题:IO流


1. 如何实现Java序列化

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题;序列化的实现:将需要被序列化的类实现Serializable 接口,该接口没有需实现的方法,implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream 对象的writeObject(Object obj)方法就可以将参数为obj 的对象写出(即保存其状态),要恢复的话则用输入流。

2. Java中有几种类型的流,以及对应的抽象类

字节流,字符流。

字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。

3. 文件和目录(IO)操作

如何列出某个目录下的所有文件?

File file = new File("e:\\总结");
File[] files = file.listFiles();
for(int i=0; i<files.length; i++) {
    if(files[i].isFile()) System.out.println(files[i]);
}

如何列出某个目录下的所有子目录?

File file = new File("e:\\总结");
File[] files = file.listFiles();
for(int i=0; i<files.length; i++) {
    if(files[i].isDirectory()) System.out.println(files[i]);
}

如何判断一个文件或目录是否存在?

创建File 对象,调用其exsit()方法即可返回是否存在,如:

System.out.println(new File("d:\\t.txt").exists());

4. 如何读写文件

读文件:

FileInputStream fin = new FileInputStream("e:\\tt.txt");
byte[] bs = new byte[100];
while(true){
    int len = fin.read(bs);
    if(len <= 0) break;
    System.out.print(new String(bs,0,len));
}
fin.close();

写文件:

FileWriter fw = new FileWriter("e:\\test.txt");
fw.write("hello world!" + System.getProperty("line.separator"));
fw.write("你好!北京!");
fw.close();

5. 统计字符串在文件中出现的次数

public int countWords(String file, String find) throws Exception {
    int count = 0;
    Reader in = new FileReader(file);
    int c;
    while ((c = in.read()) != -1) {
        while (c == find.charAt(0)) {
            for (int i = 1; i < find.length(); i++) {
                c = in.read();
                if (c != find.charAt(i)) break;
                if (i == find.length() - 1) count++;
            }
        }
    }
    return count;
}

results matching ""

    No results matching ""