Java當中的i/o
大文件的讀寫方法/字節流:
//第一步驟:導入類
import java.io.*;
class TestI{
public static void main (String args[]){
//聲明輸入流的引用
FileInputStream fis=null;
//聲明輸出流的引用
FileOutputStream fos=null;
try{
//生成代表輸入流的對象
fis=new FileInputStream("e:/workspace/java4android/from.txt");
//生成代表輸出流的對象
fos=new FileOutputStream("e:/workspace/java4android/to.txt");
//生成一個字節數組
byte [] buffer=new byte[1024];
//對於大文件需要使用循環,一次一次的讀取
while(true){
int temp=fis.read(buffer,0,buffer.length);
if (temp==-1){
break;
}
fos.write(buffer,0,temp);
}
//調用輸入流的read方法,讀取數據,存放在buffer中
System.out.println(temp);
fos.write(buffer,0,temp);
for(int i=0;i<buffer.length;i++){
System.out.println(buffer[i]);
}
//生成一String對象
//String s=new String(buffer);
//調用String對象的trim方法,將會去除掉這個字符串的首尾空格和空字符
//s=s.trim();
//System.out.println(s);
}
catch(Exception e){
System.out.println(e);
}
finally{
try{
fis.close();
fis.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
字符流:
讀寫文件時,以字符爲基礎
字符輸入流:Reader<--FileReader
Int read(char[] c,int off,int len);
字符輸出流Writer《--FileWriter
Void write(char [] c,int off,int len);
import java.io.*;
public class TestChar {
public static void main(String args[]){
FileReader fr=null;
FileWriter fw=null;
try{
fr=new FileReader("e:/workspace/java4android/from.txt");
fw=new FileWriter("e:/workspace/java4android/to.txt");
char [] buffer=new char[100];
int temp=fr.read(buffer,0,buffer.length);
fw.write(buffer,0,temp);
}
catch(Exception e){
System.out.println(e);
}
finally{
try{
fr.close();
fw.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
IO節點流與處理流:
處理流是在節點流的基礎上再處理,節點流也是字符流
import java.io.*;
class TestI{
public static void main(String args[]){
//生成一個fileReader對象的引用
FileReader fileReader=null;
//生成一個BufferReader的引用
BufferedReader bufferedReader=null;
try{
//生成fileReader對象
fileReader=new FileReader("e:/workspace/java4android/from.txt");
//生成bufferedReader對象,將fileReader對象傳入
bufferedReader=new BufferedReader(fileReader);
String line=null;
while(true){
//調用readline()方法
line=bufferedReader.readLine();
if(line==null){
break;
}
System.out.println(line);
}
}
catch(Exception e){
System.out.println(e);
}
finally{
try{
fileReader.close();
bufferedReader.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
裝飾者模式:
裝飾者是在被裝飾者的基礎上添加新的功能。
//定義一個接口
interface Worker{
public void doSomeWork();
}
//Awoker實現接口
class Aworker implements Worker{
//worker類型的成員變量
private Worker worker;
//構造方法,傳入一個worker類型的變量
public Aworker(Worker worker){
this.worker=worker;
}
public void doSomeWork(){
System.out.println("hello");
worker.doSomeWork();
}
}
class Plumber implements Worker{
public void doSomeWork(){
System.out.println("modify water pull");
}
}
class Carpenter implements Worker{
public void doSomeWork(){
System.out.println("modify door");
}
}
class Test5{
public static void main(String args[]){
//生成plumber對象
Plumber plumber=new Plumber();
//生成aWorker 將plumber對象傳入,因爲plumber是worker的子類,這裏向上轉型後即爲worker類型,直接傳入
Aworker aWorker=new Aworker(plumber);
//調用aWorker.doSomeWork()方法
aWorker.doSomeWork();
Carpenter carpenter=new Carpenter();
Aworker aWorker2=new Aworker(carpenter);
aWorker2.doSomeWork();
}
}
內部類與匿名內部類
內部類可以隨意的使用外部類定義的成員變量與成員函數
class A{
int i;
class B{
int j;
int funB(){
int result=i+j;
return result;
}
}
}
class Test{
public static void main(String args[]){
A a=new A();
A.B b=a.new B();
a.i=3;
b.j=0;
int result=b.funB();
System.out.println(result);
}
}
匿名內部類:
interface C{
public void doSome();
}
class D{
public void fun(C c){
System.out.println("D fun");
c.doSome();
}
}
class Testc{
public static void main(String args[]){
//CIm cim=new CIm();
//C c=cim;
D d=new D();
d.fun(new C(){
public void doSome(){
System.out.println("內部匿名類");
}
}
}
}