JAVA基礎之 流和檔案
阿新 • • 發佈:2018-11-21
File類
該類可以獲取檔案資訊,也可以對檔案進行管理,File物件既可以表示檔案也可以表示目錄,利用它可以對檔案和目錄的屬性進行操作。
import java.io.*; import java.util.*; public class FileTest { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("請輸入檔名"); Scanner scanner = new Scanner(System.in); String pathname = scanner.next(); File file = new File(pathname); if(!file.exists()){ try{ file.createNewFile(); }catch(IOException e){ e.printStackTrace(); } } System.out.println("檔案是否存在:"+file.exists()); System.out.println("是檔案麼:"+file.isFile()); System.out.println("是目錄麼:"+file.isDirectory()); System.out.println("名稱:"+file.getName()); System.out.println("路徑:"+file.getParent()); } }
流
根據流的方向可以分為輸入流和輸出流。使用者可以從輸入流中讀取資訊,可以從輸出流中寫入資料。
按照處理流的基本單位,可以分為:字元流和位元組流。
按照流的角色分:節點流和過濾流
InputStream和OutputStream是位元組輸入輸出的頂級父類。
Reader和Writer是字元流的頂級父類。
位元組流
InputStream主要用用於從資料來源按照位元組的方式讀取資料。
import java.io.*; import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.IO; public class FileInputStreamDemo { public static void main(String[] args) { // TODO Auto-generated method stub FileInputStream fi = null; try{ fi = new FileInputStream("e:\\test.txt"); int value=fi.read(); System.out.println("檔案中的內容是:"+(char)value); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(fi!=null){ fi.close(); } }catch(IOException e) { e.printStackTrace(); } } } }
OutputStream主要用用於王檔案裡寫入資料。
import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo { public static void main(String[] args) { // TODO Auto-generated method stub FileOutputStream fo =null; try{ fo = new FileOutputStream("d:\\test.txt"); for(int i=0;i<10;i++){ fo.write(65); } }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(fo!=null){ fo.close(); } }catch(IOException e) { e.printStackTrace(); } } } }
過濾流分為過濾輸入流和過濾輸出流
FilterInputStream是過濾輸入流,其父類是InputSteam。
BufferedInputStream就是利用緩衝區來提高效率的。
import java.io.*;
public class BufferedInputStreamDEmo {
public static void main(String[] args) {
BufferedInputStream bi = null;
try{
bi = new BufferedInputStream(new FileInputStream("d:\\test.txt"));
int result = 0;
System.out.println("檔案中的內容為");
while((result=bi.read())!=-1){
System.out.print((char)result);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(bi!=null){
bi.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
FilterOutputStream是過濾輸出流。
BufferedOutputStream例子
import java.io.*;
public class BufferedOutputStreamDemo {
public static void main(String[] args) {
BufferedOutputStream bo =null;
try{
bo = new BufferedOutputStream(new FileOutputStream("d:\\test.txt"));
for (int i = 0; i < 10; i++) {
bo.write(65);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try{
if(bo!=null){
bo.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
字元流
利用FileReader和BufferedReader讀取檔案
import java.io.*;
public class ReaderDemo {
public static void main(String[] args) {
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader("d:\\test.txt"));
System.out.println("檔案的內容是:");
String result = null;
while((result=br.readLine())!=null){
System.out.println(result);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(br!=null){
br.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
利用FileWriter和BufferedWriter讀取檔案
import java.io.*;
public class WriteDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter("d:\\test.txt"));
for(int i=0;i<10;i++){
bw.write(65);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(bw!=null){
bw.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}