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;
}