一潭流、File文件類(lèi)
Java要操作文件竞惋,先要把文件看作對(duì)象。
例1:創(chuàng)建目錄和文件
package test;
import java.io.File;
import java.io.IOException;
public class TestFile {
public static void main(String[] args) {
File file = new File("aaa");
if(!file.exists()) {
file.mkdir(); // 創(chuàng)建目錄
}
File a = new File(file, "a.txt");
if(!a.exists()) {
try {
a.createNewFile(); // 創(chuàng)建文件
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:創(chuàng)建了一個(gè)目錄和文件
例2:獲取文件的屬性
package test;
import java.io.File;
public class TestFile2 {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
System.out.println(file.getName()); // 文件的名稱(chēng)
System.out.println(file.getAbsolutePath()); // 文件的絕對(duì)路徑
System.out.println(file.length()); // 文件的大小
System.out.println(file.exists()); // 文件是否存在
System.out.println(file.canRead()); // 是否可讀
System.out.println(file.canWrite()); // 是否可寫(xiě)
// System.out.println(file.delete()); // 刪除文件
File[] files = file.listFiles(); // 獲得目錄下所有的子目錄和文件
}
}
運(yùn)行結(jié)果
例3:listFiles()方法灰嫉,獲得目錄下所有的子目錄和文件
package test;
import java.io.File;
/**
* 打印出G盤(pán)的所有文件
* @author xiangdonglee
*
*/
public class TestFile3 {
public static void main(String[] args) {
File file = new File("G:\\Downloads");
File[] files = file.listFiles();
printAllFile(files);
}
public static void printAllFile(File[] files) {
for (int i = 0; i < files.length; i++) {
if(files[i].isFile()) {
System.out.println(files[i].getAbsolutePath());
} else {
File[] files1 = files[i].listFiles();
printAllFile(files1); // 遞歸遍歷目錄
}
}
}
}
運(yùn)行結(jié)果
二拆宛、IO
作用:
- 操作系統(tǒng)文件(讀、寫(xiě))
- 用于網(wǎng)絡(luò)數(shù)據(jù)的傳輸
流:用來(lái)操作系統(tǒng)文件的工具讼撒。
分為:輸入流浑厚、輸出流
從內(nèi)容上分:字節(jié)流、字符流
在使用流的時(shí)候根盒,必須有開(kāi)有關(guān)钳幅。
三、字節(jié)流
1郑象、FileInputStream
例1:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestIO {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
FileInputStream fis = null;
if(file.exists()) {
try {
fis = new FileInputStream(file);
// 使用文件輸入流贡这,一個(gè)字符一個(gè)字符地讀取數(shù)據(jù)
// 效率很低茬末,主要學(xué)習(xí)如何查看幫助文檔厂榛,自己解決問(wèn)題
for (int i = 0; i < file.length(); i++) {
System.out.print((char)fis.read());
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
先在aaa.txt中寫(xiě)入內(nèi)容
運(yùn)行結(jié)果
例2:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestIO2 {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
FileInputStream fis = null;
if(file.exists()) {
try {
fis = new FileInputStream(file);
byte[] buf = new byte[6];
while(fis.read(buf) != -1) {
// System.out.println(buf); // 數(shù)組打印出來(lái)是地址
System.out.println(new String(buf));
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
為什么是這樣的結(jié)果?
例3:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* 字符流最高效的讀法
* @author xiangdonglee
*
*/
public class TestIO3 {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
FileInputStream fis = null;
if(file.exists()) {
try {
fis = new FileInputStream(file);
byte[] buf = new byte[6];
int len = 0;
while((len = fis.read(buf)) != -1) {
// System.out.println(buf); // 數(shù)組打印出來(lái)是地址
System.out.println(new String(buf, 0, len));
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果
2丽惭、FileOutputStream
例1:
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Scanner;
/**
* 輸出流往文件中寫(xiě)
* @author xiangdonglee
*
*/
public class TestIO4 {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
FileOutputStream fos = null;
Scanner scan = new Scanner(System.in);
if(file.exists()) {
try {
fos = new FileOutputStream(file);
System.out.println("請(qǐng)輸入您想說(shuō)的話:");
String say = scan.nextLine();
fos.write(say.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
輸入hello java
在a.txt中寫(xiě)入了hello java
例2:請(qǐng)用戶(hù)輸入任何內(nèi)容到a.txt中击奶,直到輸入88結(jié)束
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Scanner;
/**
* 請(qǐng)用戶(hù)輸入任何內(nèi)容到a.txt中,直到輸入88結(jié)束
* @author xiangdonglee
*
*/
public class TestIO5 {
public static void main(String[] args) {
File file = new File("aaa/a.txt");
FileOutputStream fos = null;
Scanner scan = new Scanner(System.in);
if(file.exists()) {
try {
fos = new FileOutputStream(file);
System.out.println("請(qǐng)輸入您想說(shuō)的內(nèi)容:");
while(true) {
String say = scan.nextLine();
if(say.equals("88")) {
break;
}
fos.write((say + "\r\n").getBytes());
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果
四责掏、字符流
1柜砾、FileReader
例:
讀取D盤(pán)下hello_java.txt中的內(nèi)容
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
/**
* 讀取D盤(pán)下hello_java.txt中的內(nèi)容
* @author xiangdonglee
*
*/
public class TestFileReader {
public static void main(String[] args) {
File file = new File("D:/hello_java.txt");
FileReader fr = null;
char[] chary = new char[10];
int len = 0;
if(file.exists()) {
try {
fr = new FileReader(file);
while((len = fr.read(chary)) != -1) {
System.out.println(new String(chary, 0, len));
}
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果
2、FileWriter
例:
package test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class TestFileWriter {
public static void main(String[] args) {
File file = new File("b.txt");
if(!file.exists()) {
try {
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
FileWriter fw = new FileWriter(file);
System.out.println("請(qǐng)輸入您想說(shuō)的內(nèi)容:");
Scanner scan = new Scanner(System.in);
String say = scan.nextLine();
fw.write(say);
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運(yùn)行結(jié)果