java io--内存操作流_JavaIO——内存操作流、打印流
我們之前所做的都是對文件進行IO處理,實則我們也可以對內存進行IO處理。我們將發生在內存中的IO處理稱為內存流。
內存操作流也可分為兩類:字節內存流和字符內存流。
(1)ByteArrayInputStream ?和 ?ByteArrayOutputStream
構造函數:
publicclassByteArrayOutputStreamextendsOutputStream
publicclassByteArrayInputStreamextendsInputStream
(2)CharArrayInputStream ?和 ?CharArrayOutputStream
構造函數:
publicclassCharArrayWriterextendsWriter
publicclassCharArrayReaderextendsReader
由此我們可以得出內存流的繼承關系:
利用內存流實現大小寫轉換:package myIO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*通過內存流實現大小寫轉換
* */
public class Test3{
public static void main(String[] args) throws IOException{
String string = "hello world,hello lemon";
//實例化InputStream對象,進行實例化時應將需要操作的數據保存在內存中,讀取的將是設置的內容
InputStream inputStream = new ByteArrayInputStream(string.getBytes());
//實例化OutputStream對象
OutputStream outputStream = new ByteArrayOutputStream();
int temp= 0;
//判斷是否讀完
while((temp = inputStream.read())!=-1) {
//對每個字節進行處理,處理之后存在于OutputStream類中
//進行大小寫轉換
outputStream.write(Character.toUpperCase(temp));
}
//直接對outputStream對象進行輸出
System.out.println(outputStream);
//關閉流
inputStream.close();
outputStream.close();
}
}
(2)內存流的操作
內存流有個很小的功能就是實現兩個文件的合并操作(對很小的文件而言)。
內存流最核心的就是:將所有OutputStream輸出的程序保存在了程序中,所以可以利用這一特征來進行處理。/*
* 實現兩個文件的合并處理
* */
public class Test3{
public static void main(String[] args) throws IOException{
String singal = File.separator;
//指明要合并兩個文件的地址
File[] files = new File[] {
new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt")
,new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test2.txt")};
String[] data = new String[2];
for(int i = 0 ;i
data[i] = readFile(files[i]);
}
StringBuffer stringBuffer = new StringBuffer();
String contentA [] = data[0].split(" ") ;
String contentB [] = data[1].split(" ") ;
for (int i = 0; i < contentA.length ; i++) {
stringBuffer.append(contentA[i]).append("(").append(contentB[i]).append(")").append(" ") ;
}
System.out.println(stringBuffer);
}
//讀取文件內容,使用File對象因為其包含完整的路徑信息
public static String readFile(File file) throws IOException{
if(file.exists()) {
InputStream inputStream = new FileInputStream(file);
//沒有向上轉型,因為后續要使用toByteArray()方法
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int temp = 0;
byte[] data = new byte[10];
while((temp = inputStream.read(data))!=-1) {
//將數據保存在byteArrayOutputStream
byteArrayOutputStream.write(data,0,temp);
}
byteArrayOutputStream.close();
inputStream.close();
return new String(byteArrayOutputStream.toByteArray());
}
return null;
}
}
2、打印流
打印流的本質是解決OutputStream的缺陷,因為若想將非二進制的數據通過程序向終端目標直接輸出信息的話,OutputStream有如下缺陷:所有的數據都要轉換成字節數組,若要輸出int、double更是不方便。
(1)進行簡單打印流的設計/*
* 設計簡單打印流
* */
class PrintDesign{
private OutputStream outputStream;
//構造函數
//有外部傳入要輸出的目的終端
public PrintDesign(OutputStream outputStream){
super();
this.outputStream = outputStream;
}
//實現輸出的功能(傳入參數為字符串)
public void print(String string) throws IOException{
this.outputStream.write(string.getBytes());
}
//實現換行功能
public void println(String string) throws IOException{
this.print(string+"\r\n");
}
//傳入參數為int
public void print(int data) throws IOException{
this.print(String.valueOf(data));
}
public void println(int data) throws IOException{
this.print(String.valueOf(data)+"\r\n");
}
}
public class Test3{
public static void main(String[] args) throws IOException{
String singal = File.separator;
PrintDesign printDesign = new PrintDesign(new FileOutputStream(
new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt")));
printDesign.println("姓名:");
printDesign.print("lemon");
printDesign.println("年齡:");
printDesign.print(20);
}
}
我們可以發現經過簡單的處理使得OutputStream的功能變得更加強大了,其實我們所做的工作只不過是對OutputStream做了一個封裝而已。實則java中提供有專門的打印流處理類:字節打印流rintStream、字符打印流PrintWriter.
(2)認識打印流處理類
字節打印流:publicclassPrintStreamextendsFilterOutputStream
構造函數:publicPrintStream(OutputStreamout)
字符打印流:publicclassPrintWriterextendsWriter
構造函數:publicPrintWriter(OutputStreamout)
publicPrintWriter(Writerout)
打印流的設計模式屬于裝飾者設計模式:核心是某個類的功能,但是為了得到更好的操作效果,讓其支持的功能更多一些。
(3)打印流的使用
在后續的應用中字符打印流(PrintWriter)引用比較對,因為它可以接收Writer和OutputStream兩種類型的參數;而字節打印流(PrintStream)只可接收OutputStream類型的參數。/*
* 字符打印流的使用
* */
public class Test3{
public static void main(String[] args) throws FileNotFoundException{
String singal = File.separator;
PrintWriter printWriter = new PrintWriter(
new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt"));
printWriter.print("班級:");
printWriter.println("數學152");
printWriter.println("年齡:");
printWriter.println(20);
printWriter.close();
}
}
(4)格式化輸出
我們在C語言遇到一個printf()函數,這個函數在輸出的時候可以使用一些占位符,例如:字符串(%s)、數字(%d)、小數(%f)、字符(%c)等。從JDK1.5開始,PrintStream類中也追加了此種操作。
格式化輸出:publicPrintStream printf(Stringformat, Object ...args)/*
* 格式化輸出
* */
public class Test3{
public static void main(String[] args) throws FileNotFoundException{
String name = "lemon";
int age = 20;
double salary = 10.3;
String singal = File.separator;
PrintStream printStream = new PrintStream(new FileOutputStream(
new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test2.txt")));
printStream.printf("姓名:%s,年齡:%d,工資:%f",name,age,salary);
printStream.close();
}
}
總結
以上是生活随笔為你收集整理的java io--内存操作流_JavaIO——内存操作流、打印流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java图形用户界面概述_Java中图形
- 下一篇: mysql数据库程序设_MySQL数据库