文件(java.io.File)
創(chuàng)建文件
boolean java.io.File.createNewFile() throws IOException{}
//用來創(chuàng)建文件睦刃,如果文件存在廓奕,創(chuàng)建失敗,返回false;
實例:
//創(chuàng)建一個file對象
File f1 = new File("a.txt");
try
{
//創(chuàng)建文件:boolean java.io.File.createNewFile() throws IOException
boolean b = f1.createNewFile();
//第二次將會創(chuàng)建失敗false,這里和流不一樣
System.out.println(b);
}
catch (Exception e)
{
// TODO: handle exception
}
//目錄分隔符:File.separator软族,相當于“\\”跨平臺路徑。
File f2 = new File("E:"+File.separator+"tmp","b.txt"); //File f2 = new File("E:\\tmp","b.txt");
f1.delete(); //刪除文件:boolean java.io.File.delete()
f1.deleteOnExit(); //程序退出時残制,自動刪除:void java.io.File.deleteOnExit()
boolean b = f1.exists(); //判斷文件是否存在
boolean b = f1.isDirectory(); //判斷是否為文件夾
創(chuàng)建文件夾
實例
File dir1 = new File("abc");
File dir2 = new File("a\\b\\c\\d");
try
{
//創(chuàng)建文件目錄(即文件夾):boolean java.io.File.mkdir()
//該方法只能創(chuàng)建“一級”目錄
boolean b = dir1.mkdir();
System.out.println(b);
//創(chuàng)建多級文件夾:boolean java.io.File.mkdirs()
b = dir2.mkdirs();
System.out.println(b);
}
catch (Exception e)
{
System.out.println(e.toString());
}
boolean b = f1.isFile(); //判斷是否為文件
獲取文件信息
1)getName():獲取文件名立砸;
2)getParent():獲取文件父目錄;
3)getPath():獲取文件路徑初茶;
4)getAbsolutePath():獲取文件絕對路徑颗祝;
5)lastModified():獲得文件最后一次被修改的時間;
6)length():獲取文件大心詹肌螺戳;
7)renameTo():文件剪切,將文件f1剪切然后粘貼到f2(相當于右鍵f1->剪切->粘貼->f2所在目錄)
流
java IO流分為字符流和字節(jié)流兩種折汞。
判斷字節(jié)流和字符流倔幼,明確數(shù)據(jù)是否“純文本”:
- 是:字符流;
- 否:字節(jié)流爽待。
字節(jié)流
1损同、字節(jié)流有輸入和輸出流,輸入流InputStream鸟款。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileCount {
publicstatic void main(String[] args) {
int count=0; //統(tǒng)計文件字節(jié)長度
InputStream streamReader = null; //文件輸入流
try{
streamReader=newFileInputStream(new File("D:/David/Java/java 高級進階/files/tiger.jpg"));
/*FileInputStream是有緩沖區(qū)的膏燃,所以用完之后必須關(guān)閉,否則可能導致內(nèi)存占滿何什,數(shù)據(jù)丟失组哩。 */
while(streamReader.read()!=-1) { //讀取文件字節(jié),并遞增指針到下一個字節(jié)
count++;
}
System.out.println("---長度是: "+count+" 字節(jié)");
}catch (final IOException e) {
e.printStackTrace();
}finally{
try{
streamReader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
2处渣、FileOutputStream
Java I/O默認是不緩沖流的伶贰,所謂“緩沖”就是先把從流中得到的一塊字節(jié)序列暫存在一個被稱為buffer的內(nèi)部字節(jié)數(shù)組里,然后你可以一下子取到這一整塊的字節(jié)數(shù)據(jù)霍比,沒有緩沖的流只能一個字節(jié)一個字節(jié)讀幕袱,效率孰高孰低一目了然暴备。
import java.io.*;
public class FileCopy {
public static void main(String[] args) {
// TODO自動生成的方法存根
byte[] buffer=new byte[512]; //一次取出的字節(jié)數(shù)大小,緩沖區(qū)大小
int numberRead=0;
FileInputStream input=null;
FileOutputStream out =null;
try {
input=new FileInputStream("D:/David/Java/java 高級進階/files/tiger.jpg");
out=new FileOutputStream("D:/David/Java/java 高級進階/files/tiger2.jpg"); //如果文件不存在會自動創(chuàng)建
while ((numberRead=input.read(buffer))!=-1) { //numberRead的目的在于防止最后一次讀取的字節(jié)小于buffer長度悠瞬,
out.write(buffer, 0, numberRead); //否則會自動被填充0
}
} catch (final IOException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}finally{
try {
input.close();
out.close();
} catch (IOException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}
}
}
}
3、讀寫對象
ObjectInputStream 和ObjectOutputStream,該流允許讀取或?qū)懭胗脩糇远x的類浅妆,但是要實現(xiàn)這種功能望迎,被讀取和寫入的類必須實現(xiàn)Serializable接口,其實該接口并沒有什么方法凌外,可能相當于一個標記而已辩尊,但是確實不合缺少的。
import java.io.*;
public class ObjetStream {
/**
* @param args
*/
public static void main(String[] args) {
// TODO自動生成的方法存根
ObjectOutputStream objectwriter=null;
ObjectInputStream objectreader=null;
try {
objectwriter=new ObjectOutputStream(new FileOutputStream("D:/David/Java/java 高級進階/files/student.txt"));
objectwriter.writeObject(new Student("gg", 22));
objectwriter.writeObject(new Student("tt", 18));
objectwriter.writeObject(new Student("rr", 17));
objectreader=new ObjectInputStream(new FileInputStream("D:/David/Java/java 高級進階/files/student.txt"));
for (int i = 0; i < 3; i++) {
System.out.println(objectreader.readObject());
}
} catch (IOException | ClassNotFoundException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}finally{
try {
objectreader.close();
objectwriter.close();
} catch (IOException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}
}
}
}
class Student implements Serializable{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
字符流
(顧名思義康辑,就是操作字符文件的流)
1摄欲、直接用FileReader打開的文件
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.CharBuffer;
public class Print {
/**
* @param args
*/
public static void main(String[] args) {
// TODO自動生成的方法存根
char[] buffer=new char[512]; //一次取出的字節(jié)數(shù)大小,緩沖區(qū)大小
int numberRead=0;
FileReader reader=null; //讀取字符文件的流
PrintWriter writer=null; //寫字符到控制臺的流
try {
reader=new FileReader("D:/David/Java/java 高級進階/files/copy1.txt");
writer=new PrintWriter(System.out); //PrintWriter可以輸出字符到文件,也可以輸出到控制臺
while ((numberRead=reader.read(buffer))!=-1) {
writer.write(buffer, 0, numberRead);
}
} catch (IOException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}finally{
try {
reader.close();
} catch (IOException e) {
// TODO自動生成的 catch 塊
e.printStackTrace();
}
writer.close(); //這個不用拋異常
}
}
}
原博地址:
http://blog.csdn.net/qingdujun/article/details/41223841
http://blog.csdn.net/yczz/article/details/38761237
感謝作者分享疮薇,受益匪淺胸墙。