首頁 > 軟體

java檔案操作輸入輸出結構詳解

2022-07-07 18:05:36

一、實驗目的

  • 1. 掌握輸入輸出流的總體結構;
  • 2. 掌握流的概念;
  • 3. 掌握FileInputStream類、FileOutputStream類、FileReader類、FileWriter類的構造方法、常用方法的使用;
  • 4. 瞭解各種流(包括檔案流、管道流、連線檔案、過濾流、物件的序列化、隨機存取)的使用。

二、實驗程式碼

1.使用Java的輸入輸出

使用Java的輸入、輸出流將一個文字檔案的內容按行讀出,每讀出一行就順序新增行號,並寫入到另一個檔案中。

package 作業練習.test4;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.io.File;
public class FileScanner {
public static void main(String[] args) throws Exception{
System.out.print("請輸入檔名:");
Scanner reader = new Scanner(System.in);
String fileName = reader.nextLine();
File f = new File("E:\Intellij IDEL\project\src\"+fileName);
Scanner fi = new Scanner(f);
//輸出:
String sLine = null;
int index = 0;
while(fi.hasNext()) {
sLine = fi.nextLine();
System.out.println(++index + " " + sLine);
try {
BufferedWriter out = new BufferedWriter(new FileWriter("test1.txt"));
out.write(index + " " + sLine);
} catch (IOException e) {
}
}
System.out.println("檔案建立成功!");
}
}

2.使用RandomAccessFile流將一個文字檔案倒置讀出

package 作業練習.test4;
import java.io.*;
public class test2 {
public static void main(String []args) throws IOException
{
RandomAccessFile file =new RandomAccessFile("E:\Intellij IDEL\project\src\test4\test.txt","r");
long len =file.length();
while(0!=len--)
{
file.seek(len);
char ch =(char)file.read();
System.out.print(ch);
}
file.close();
}
}

3.請分別使用不帶緩衝區和帶緩衝區的位元組流複製圖片(或者音訊或者視訊)檔案

要求:

  • (1) 使用位元組流FileInputStream、FileOutputStream實現複製;
  • (2) 在定義位元組緩衝區大小時,可以嘗試16位元組、256位元組、1024位元組等不同大小的緩衝區進行復制。
  • (3) 請統計採用不同方式進行檔案複製所花的時間,並進行分析。
package 作業練習.test4;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class App14_3 {
public static void main(String[] args) {
File reader = new File("E:\Intellij IDEL\project\src\test4\1.png");
File writer = new File("\Intellij IDEL\project\src\test4\2.png");
FileInputStream fis = null;
try {
fis = new FileInputStream(reader);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(writer);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] b = new byte[256];
int len = -1;
try {
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bos.close();
fos.close();
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package 作業練習.test4;
import java.io.*;
public class test3 {
public static void main(String []args) throws IOException
{
// 帶緩衝區的位元組流拷貝一個文字檔案
FileInputStream fin =new FileInputStream("E:\Intellij IDEL\project\src\test4\test.txt");
FileOutputStream fout =new FileOutputStream("E:\Intellij IDEL\project\src\test4\test1.txt");
byte buf[] =new byte[2014]; //建立位元組陣列,作為臨時緩衝
if(fin.read(buf)!=-1)
{
fout.write(buf);
}
System.out.println("檔案複製成功");
fin.close();
fout.close();
/*帶緩衝區的字元流拷貝一個文字檔案
FileReader fin =new FileReader("E:Intellij IDELprojectsrctest4test2.txt");
BufferedReader din=new BufferedReader(fin) ;
FileWriter fou =new FileWriter("E:Intellij IDELprojectsrctest4test.txt");
BufferedWriter dou =new BufferedWriter(fou);
char c[]=new char[1024]; //建立字元陣列
din.read(c);
fou.write(c);
System.out.println("檔案複製成功");
din.close();
fou.close();
fin.close();
dou.close();
*/
}
}

4.請分別使用不帶緩衝區和帶緩衝區的字元流複製文字檔案

要求:

  • (1) 使用字元流FileReader、FileWriter實現複製;
  • (2) 在定義字元緩衝區大小時,可以嘗試16字元、256字元、1024字元等不同大小的緩衝區進行復制。
package 作業練習.test4;
import java.io.*;
public class App14_5 {
static App14_5 test=new App14_5();
public static String openFile(String fileName){ //開啟檔案
StringBuffer sb=null;
FileInputStream fis=null;
try {
fis=new FileInputStream(fileName); ; //範例化輸入流物件
byte b[]=new byte[1024];
int len;
sb=new StringBuffer();
while( (len = fis.read(b))!=-1 ){ //讀檔案並判斷是否到達檔案尾
String str=new String(b,0,len);
sb.append(str);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
return sb.toString();
}
public static boolean saveFile(String fileName,String content) throws IOException{
boolean state=false;
FileOutputStream fos=null;
try {
fos=new FileOutputStream(fileName); //範例化輸出流物件
//把content寫入到檔案中
state=true;
} catch (Exception e) {
e.printStackTrace();
}finally {
}
return state;
}
public static boolean copyFile(String sourceFileName,String destinationFifleName){
boolean sate =false;
InputStream fis=null;
OutputStream fos=null;
try {
fis=new FileInputStream(sourceFileName);
fos=new FileOutputStream(destinationFifleName);
int len;
byte buffer[]=new byte[1024];
//此處請填寫多行
len=fis.read(buffer);
String str1=new String(buffer,0,len);
byte[] b = str1.getBytes();
fos.write(b);
sate =true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fis!=null) fis.close();
if(fos!=null) fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sate;
}
public static void main (String args[]) {
App14_5 test=new App14_5();
test.copyFile("E:\Intellij IDEL\project\src\test4\test.txt",
"E:\Intellij IDEL\project\src\test4\test3.txt");
}
}
}

到此這篇關於java檔案操作輸入輸出詳解的文章就介紹到這了,更多相關java檔案輸入輸出內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com