java文件流輸出
1. java如何使用文件位元組輸出流類:FileOutputStream
文件位元組輸出流關聯指定文件路徑的文件,數據通過文件位元組輸出流以位元組為單位輸出並保存到文件中。文件位元組輸出流繼承自OutputStream類,並實現OutputStream類的各種方法。
文件位元組輸出流的構造方法語法如下:
語法1:以File對象為參數創建FileOutputStream實例
- new FileOutputStream(File file)1
語法2:以文件對象的絕對路徑為參數創建FIleOutputStream實例
- new FileOutputStream(String filepath)
2. java輸入輸出流與文件,求源代碼!感謝大佬!
你好,java的API中提供了用於對象輸入輸出文件的操作,實例代碼如下:
定義單詞類如下(注意:你定義的類要實現Serializable介面)
public class Words implements Serializable {
private int size;
private String[] words;
public Words(){};
public Words(String...strs){
this.words = strs;
this.size = strs.length;
}
@Override
public String toString() {
return "Words{" +
"size=" + size +
", words=" + Arrays.toString(words) +
'}';
}
}
2. 對象輸入輸出api測試類
public class ObjIOTest {
public static void main(String[] args) {
String path = "d:/myIOTest.txt";
ObjIOTest objIOTest = new ObjIOTest();
Words words = new Words("hello", "my", "dear", "friend");
try {
objIOTest.writeObject(path,words);
Words wordsFromFile = (Words)objIOTest.readObject(path);
System.out.println(wordsFromFile.toString());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//java serialize a object to file
public void writeObject(String path,Object map) throws IOException{
File f=new File(path);
FileOutputStream out=new FileOutputStream(f);
ObjectOutputStream objwrite=new ObjectOutputStream(out);
objwrite.writeObject(map);
objwrite.flush();
objwrite.close();
}
// read the object from the file
public Object readObject(String path) throws IOException, ClassNotFoundException{
FileInputStream in=new FileInputStream(path);
ObjectInputStream objread=new ObjectInputStream(in);
Object map=objread.readObject();
objread.close();
return map;
}
}
把兩段代碼拷貝到一個包下即可運行了,希望您的問題得到解答
3. java中的輸入輸出流該怎麼理解
數據流是一串連續不斷的數據的集合,就象水管里的水流,在水管的一端一點一點地供水,而在水管的另一端看到的是一股連續不斷的水流。數據寫入程序可以是一段、一段地向數據流管道中寫入數據,這些數據段會按先後順序形成一個長的數據流。對數據讀取程序來說,看不到數據流在寫入時的分段情況,每次可以讀取其中的任意長度的數據,但只能先讀取前面的數據後,再讀取後面的數據。不管寫入時是將數據分多次寫入,還是作為一個整體一次寫入,讀取時的效果都是完全一樣的。
「流是磁碟或其它外圍設備中存儲的數據的源點或終點。」
在電腦上的數據有三種存儲方式,一種是外存,一種是內存,一種是緩存。比如電腦上的硬碟,磁碟,U盤等都是外存,在電腦上有內存條,緩存是在CPU裡面的。外存的存儲量最大,其次是內存,最後是緩存,但是外存的數據的讀取最慢,其次是內存,緩存最快。這里總結從外存讀取數據到內存以及將數據從內存寫到外存中。對於內存和外存的理解,我們可以簡單的理解為容器,即外存是一個容器,內存又是另外一個容器。那又怎樣把放在外存這個容器內的數據讀取到內存這個容器以及怎麼把內存這個容器里的數據存到外存中呢?
在Java類庫中,IO部分的內容是很龐大的,因為它涉及的領域很廣泛:
標准輸入輸出,文件的操作,網路上的數據流,字元串流,對象流,zip文件流等等,java中將輸入輸出抽象稱為流,就好像水管,將兩個容器連接起來。將數據沖外存中讀取到內存中的稱為輸入流,將數據從內存寫入外存中的稱為輸出流。
流是一個很形象的概念,當程序需要讀取數據的時候,就會開啟一個通向數據源的流,這個數據源可以是文件,內存,或是網路連接。類似的,當程序需要寫入數據的時候,就會開啟一個通向目的地的流。
4. Java里那個輸入流和輸出流怎麼用
//java中使用文件輸入流和文件輸出流進行文件讀寫的用例!
Java
packagecom.test.io;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
/**
*
*@author亞當愛上java
*用例內容:文件輸入流和文件輸入流結合用例,位元組流方式
*時間:2010-06-20
*注意事項:文件輸入流和文件輸出流都是相對與內存來說的,例如通過程序讀取文件時往內存輸入數據就是文件輸入流
*/
publicclassFileInputOrOutput{
publicstaticvoidmain(String[]args){
//文件或者路徑名的抽象表現形式,意思就是說之後如果進行操作的話就是全部在這個抽象路徑名所指向的文件或者文件加中
Filefile=newFile("e:/test.txt");
Filefile2=newFile("e:/test1.txt");
//文件位元組數的個數
//System.out.println(file.length());
try{
/*------------------------------------------讀操作部分-----------------------------------------------*/
//文件輸入流對象
InputStreamfis=newFileInputStream(file);
//文件輸入流對象所讀取的位元組數大小
//System.out.println(fis.available());
/**
*1.按照一個位元組為單位進行讀取數據,弊端是遇到中文就會把中文的漢字拆開從而出現亂碼
*/
////流對象讀出的返回值是每次所讀到的一個字元所對應的ascii碼值
//inti=fis.read();
//
////如果已經讀到文件尾則i==-1,此時終止循環
//while(i!=-1){
//System.out.print((char)i);
//保證每一次循環都繼續往後讀取一個字元,否則i的值不變會成為死循環
//i=fis.read();
//}
/**
*2.按照一個位元組數組所指定的大小為單位進行讀取,每次最多可以讀取數組定義的大小的位元組個數
*/
//每次讀取都以1K位元組作為單位來進行
byteb[]=newbyte[1024];
//流對象讀出並返回的是每次讀取位元組的個數,最大每次讀取自己數可以和數組b.length相同
//b中存儲了每次所讀取的所有數據
inti=fis.read(b);
Stringstr="";
//如果已經讀到文件尾則i==-1,此時終止循環
while(i!=-1){
//把每次讀取的位元組數組解碼為字元串
//參數1:要解碼為字元的位元組
//參數2:要解碼的首字元的索引
//參數3:要解碼的位元組的個數,如果文件個數大於所設定的一次讀取文件的大小時i的取值就是
//b.length,否則小於數組的位元組大小時則為實際的讀取出自己數的大小
str=str+newString(b,0,i);
//保證每一次都往文件的下一部分進行讀取,否則i值沒有變化會成為死循環
i=fis.read(b);
}
//System.out.print(str);
//關閉輸入流對象
fis.close();
/*------------------------------------------寫操作部分-----------------------------------------------*/
//文件輸出流對象
OutputStreamfos=newFileOutputStream(file2);
//str是從file所指定的文件中讀出的所有內容,將此內容寫入另一個文件中
//將字元解碼為位元組數組
byteb2[]=str.getBytes();
//將解碼後的位元組數組,通過文件輸出流對象寫入到緩沖區中
fos.write(b);
//強制將緩沖區中的內容輸出到文件中
fos.flush();
//關閉輸出流對象
fos.close();
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
5. java將獲得的文件寫入輸出流
可以通過BufferedReader 流的形式進行流讀取,之後通過readLine方法獲取到流每行的內容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最後一行不存在,為空結束循環
{
System.out.println(str);//原樣輸出讀到的內容
};
備註: 上面的bre就是提問者需要的流。流用完之後必須close掉,如上面的就應該是:bre.close(),否則bre流會一直存在,直到程序運行結束。
6. JAVA的輸入輸出流是什麼有幾種
輸出流:所有的數據都寫入指定的文件中了import java.io.*;
public class FileOutputStreamDemo{
public static void main(String[] args){
String str="所有的數據都寫入指定的文件中了";
try{
System.out.println("創建文件輸出流對象:");
FileOutputStream fos=new FileOutputStream("c://1.txt");
System.out.println("將數據寫入文件中...");
fos.write(str.getBytes());
System.out.print("關閉文件");
fos.close();
}
catch(IOException e){
}
}
}輸入流:將文件中的內容寫入data中import java.io.*;
public class FileInputStreamDemo{
public static void main(String[] args){
try{
FileInputStream fis=new FileInputStream("c://1.txt");
byte[]data=new byte[100];
System.out.println("將文件中的內容寫入data中...");
fis.read(data);
PrintStream ps=System.out;
ByteArrayOutputStream baos=new ByteArrayOutputStream();
baos.write(data);
System.out.print("顯示data中的內容:...");
baos.writeTo(ps);
fis.close();
baos.close();
ps.close();
}
catch(IOException e){
}
}
}運行程序體會一下輸入位元組流和字元流和輸入位元組流和字元流你快要下載一個jdk api文檔裡面好多關於這方面的說明
7. java怎麼輸出
java控制台輸出由print( ) 和 println( )來完成最為簡單。這兩種方法由rintStream(System.out引用的對象類型)定義。盡管System.out是一個位元組流,用它作為簡單程序的輸出是可行的。因為PrintStream是從OutputStream派生的輸出流,它同樣實現低級方法write(),write()可用來向控制台寫數據。PrintStream 定義的write( )的最簡單的形式如下:
void write(int byteval)
該方法按照byteval指定的數目向文件寫位元組。盡管byteval 定義成整數,但只有低位的8個位元組被寫入。下面的短例用 write()向屏幕輸出字元「A」,然後是新的行。
// Demonstrate System.out.write().
class WriteDemo {
public static void main(String args[]) {
int b;
b = 'A';
System.out.write(b);
System.out.write(' ');
}
}
一般不常用write()來完成向控制台的輸出(盡管這樣做在某些場合非常有用),因為print()和println() 更容易用。
四、PrintWriter類
盡管Java允許用System.out向控制台寫數據,但建議僅用在調試程序時或在常式中。對於實際的程序,Java推薦的向控制台寫數據的方法是用PrintWriter流。PrintWriter是基於字元的類。用基於字元類向控制台寫數據使程序更為國際化。PrintWriter定義了多個構造函數,這里所用到的一個如下:
PrintWriter(OutputStream outputStream, boolean flushOnNewline)
outputStream是OutputStream類的對象,flushOnNewline控制Java是否在println()方法被調用時刷新輸出流。如果flushOnNewline為true,刷新自動發生,若為false,則不發生。
PrintWriter支持所有類型(包括Object)的print( )和println( )方法,這樣,就可以像用ystem.out那樣用這些方法。如果遇到不同類型的情況,PrintWriter方法調用對象的toString()方法並列印結果。用PrintWriter向外設寫數據,指定輸出流為System.out並在每一新行後刷新流。例如這行代碼創建了與控制台輸出相連的PrintWriter類。
PrintWriter pw = new PrintWriter(System.out, true);
下面的應用程序說明了用PrintWriter處理控制台輸出的方法:
// Demonstrate PrintWriter
import java.io.*;
public class PrintWriterDemo {
public static void main(String args[]) {
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("This is a string");
int i = -7;
pw.println(i);
double d = 4.5e-7;
pw.println(d);
}
}
該程序的輸出如下:
This is a string
-7
4.5E-7
8. java中建立文件輸出流,當文件不存在時是否會新建文件
java中建立文件輸出流,當文件不存在時會新建一個文件:
如果有同名文件,自動覆蓋。不存在時自動建立。FileOutputStream的默認構造方法是直接覆蓋掉原來的文件,而FileOutputStream(File file, boolean append) 的構造方法如果後面的append為true的時候就是追加到尾部而不是直接覆蓋了。
,當創建IO對象是,文件是以獨占的方式打開,就好比windows打開文件時進行刪除,所以是無法刪除。創建文件未寫入信息,是因為缺少 out.flash() 這句,將緩存內容寫入文件。通常在做文件操作,要先判斷文件是否存在,最後再寫入操作。
9. Java使用文件流(getResourceAsStream())後將文件流輸出成文件
讀數據的(rs=fis.read(data1, 0, rs)這一句改成
(rs=fis.read(data1, 0, data1.length)就可以了,你的rs一直為零,肯定讀不出數據了。讀出的數據為空,然後再寫,肯定為空了