主要转自:http://lapulande.iteye.com/blog/706051
其他认为很有价值的讲解IO的blog:
http://blog.csdn.net/yczz/article/details/38761237
http://blog.csdn.net/zhangerqing/article/details/8466532
先给出一个简单的java的io例子。 改写自 Head First Java.
补充一句:java默认的相对路径的根目录,为project文件夹下。
import java.io.*;
import java.util.*;
public class Jukebox1 {
public static void main(String[] args) {
ArrayList<String> songList = new ArrayList<String>();
File file = new File("SongList.txt");
try{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null){
String[] tokens = line.split("/");
songList.add(tokens[0]);
}
System.out.println(songList);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
其中SongList.txt文件如下:
Pink Moon/Nick Drake
Somersault/Zero 7
Shiva Moon/ Prem Joshua
Circles/BT
Deep Channel/ Afro Celts
Passenger/ Headmix
Listen/ Tahiti 80
输出结果如下:
[Pink Moon, Somersault, Shiva Moon, Circles, Deep Channel, Passenger, Listen]
这段程序实现的是,将SongList文件,逐行读入,以“/”进行分割,取分隔后第一个字段,存入songList, 后输出。
读取文件时,使用了:BufferedReader.readLine()
下面逐渐深入讨论一下java IO。 主要转载自: http://lapulande.iteye.com/blog/706051
Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法。Writer中 write(),flush()和close()方法为抽象方法。子类应该分别实现他们。
Java IO已经为我们提供了三个方便的Reader的实现类,FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。
FileReader读txt文件例子
FileReader fr = new FileReader("D:/Test.txt");
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print( (char)ch );
}
其中read()方法返回的是读取得下个字符。
InputStreamReader读txt文件例子
InputStream is = new FileInputStream(new File("D:/Test.txt"));
InputStreamReader fr = new InputStreamReader(is);
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print((char)ch);
}
这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。 read()方法是比较好费时间的,如果为了提高效率,我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用 readLine()方法。
BufferedReader br = new BufferedReader(new FileReader("Test.txt")));
String data = br.readLine();//一次读入一行,直到读入null为文件结束
while( data!=null){
System.out.println(data);
data = br.readLine(); //接着读下一行
}
FileWriter fw = new FileWriter("D:/Test.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));
osw.write(s,0,s.length());
osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);
pw.println(s);
fw.close();
osw.close();
pw.close();
File file = new File("D:/Test.txt");
File dest = new File("D:/new.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(dest));
String line = reader.readLine();
while(line!=null){
writer.write(line);
line = reader.readLine();
}
writer.flush();
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}