IOとファイル
ファイル
ファイルまたはファイルディレクトリ(一般にフォルダと呼ばれる)を表すFileクラスのオブジェクト
package com.atguigu.java;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
File file1 = new File("hello.txt");//相对路径,相对当前module
System.out.println(file1.getAbsoluteFile());
System.out.println(file1.getPath());
System.out.println(file1.getName());
System.out.println(file1.getParent());
System.out.println(file1.length());
System.out.println(file1.lastModified());
String[] list = file1.list();
for(String s: list){
System.out.println(list);
}
File[] files = file1.listFiles();
for(File f:files){
System.out.println(files);
}
System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
System.out.println(file1.exists());
System.out.println(file1.canRead());
System.out.println(file1.isHidden());
if(!file1.exists())
file1.createNewFile();
else {
file1.delete();
}
file1.mkdir();
file1.mkdirs();
}
}
Fileクラスには、ファイルまたはファイルディレクトリの作成、削除、名前の変更、変更時間、ファイルサイズなどのメソッドが含まれ、ファイルの内容の書き込みまたは読み取りは含まれません。ファイルの内容を読み書きする必要がある場合は、IOストリームを使用して完了する必要があります。
ストリームの分類
- バイトストリーム
- 入力ストリーム、出力ストリーム
- ノードフロー
ストリームシステム
バッファストリーム
ストリームを閉じるときは、最初に外側を閉じてから、内側を閉じます。(外側のストリームが閉じられると、内側のストリームは自動的に閉じられます)
バッファストリームの読み取りと書き込みが高速になります。読み取りと書き込みは、メモリ内のスペースを開きます。
変換フロー
バイトストリームと文字ストリーム間の変換を提供します
- InputStreamReader
- OutputStreamWriterの
例:utf-8ファイルをgbkファイルに変換します
package com.atguigu.java;
import java.io.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
File file1 = new File("dbcp.txt");
File file2 = new File("dbcp_bgk.txt");
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
char[] cbuf = new char[20];
int len;
while ((len = isr.read(cbuf)) != -1){
osw.write(cbuf,0,len);
}
isr.close();
osw.close();
}
}
標準入力および出力ストリーム
- 標準入力および出力ストリーム
システム、標準入力ストリームでは、キーボードからのデフォルト入力、タイプはInputStream
システム、出力標準出力ストリーム、コンソールからのデフォルト出力、タイプはPrintStreamであり、これはOutputStreamのサブクラスです。 - SystemクラスのSetIn()/ Setout()メソッドは、入力ストリームと出力ストリームを再指定します
- 演習:キーボードから文字列を入力し、読み取った文字列の行全体を大文字の出力に変換する必要があります。その後、入力操作を続行します。
package com.atguigu.java;
import java.io.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String data;
while(true){
data = br.readLine();
if("e".equals(data) || "exit".equals(data))
break;
String upperCase = data.toUpperCase();
System.out.println(upperCase);
}
br.close();
}
}
印刷ストリーム
PrintStreamとPrinterWriterは
、System.out.println()メソッドを指定されたファイルに出力するための一連のオーバーロードされたメソッドprint()とprintln()を提供します。
package com.atguigu.java;
import java.io.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream(new File("D:\\IO\\text.txt"));
ps = new PrintStream(fos,true);
if(ps != null){
System.setOut(ps);
}
for(int i = 0;i <= 255;i ++){
System.out.println((char)i);
if(i % 50 == 0)
System.out.println();
}
}catch (Exception e){
ps.close();
}
}
}
データフロー
DataInputStream和DataOutputStream
package com.atguigu.java;
import java.io.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeUTF("刘建辰");
dos.flush();
dos.writeInt(23);
dos.writeBoolean(true);
dos.flush();
dos.close();
}
}
オブジェクトストリーム
ObjectInputStream
オブジェクトとObjectInputStreamオブジェクトをシリアル化できるようにするには、オブジェクトクラスでSerializableインターフェイスを実装する必要があります。
機能:javaでオブジェクトをデータソースに書き込み、データソースからオブジェクトを復元できます。
オブジェクトは静的型定数を指定する必要があります。serialVersionUIDstatic
および一時的に変更された属性はシリアル化できません
package com.atguigu.java;
import java.io.*;
public class HelloWorld {
public static void main(String[] args){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
oos.writeObject(new String("我爱北京天安门"));
oos.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
if(oos != null)
{
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ObjectInputStream ois = null;
try {
ois = new ObjectOutputStream(new FileInputStream("object.dat"));
Object object = ois.readObject();
String str = (String)object;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(ois != null) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
RandomAccessFile类
- RandomAccessFileはObjectクラスから直接継承し、DataInputおよびDataOutputインターフェイスを実装します
- RandomAccessFileは、入力ストリームと出力ストリームの両方として使用できます
- 「R」は読み取り専用モードで開かれ、「rw」は読み取りと書き込みのために開かれ、「rwd」は読み取りと書き込みのために開かれます:ファイルコンテンツの更新は同期されます、「rws」は読み取りと書き込みのために開かれます:ファイルコンテンツとメタは同期されますデータ更新
- RandomAcessFileを出力ストリームとして使用する場合、書き込まれたファイルが存在しない場合は、実行プロセス中に自動的に作成されます。書き込まれたファイルが存在する場合は、元のファイルの内容が上書きされます。(デフォルトでは、最初から上書きします)。