javaIOプログラミング
IOシステム
ファイル
一般的な方法 | 説明 |
---|---|
MKDIR | 単一のディレクトリを作成します。 |
mkdirs | 複数のディレクトリを作成します |
ある、getPath | ファイルへのパスを取得します。 |
長さ | ファイルの長さを取得します。 |
getName | ファイル名を取得します。 |
getParentFile | ディレクトリのファイルを取得します |
存在します | ファイルが存在するかどうかを確認 |
でCreateNewFile | ファイルを作成します。 |
リスト | ディレクトリとディレクトリ内のファイルを文字列の配列を返します |
LISTFILES | 抽象パス名の配列を表し、この抽象パス名がそのファイルのディレクトリを示し返します。 |
getAbsolutePath | この抽象パス名文字列の絶対パス名を返します。 |
ファイルを作成します。
1つのファイルを作成します。
@Test
//文件的创建
public void IoFilePractise() throws IOException {
File file = new File("D:\\file\\1.txt");
//判断file目录是否存在
if (!file.getParentFile().exists()) {
System.out.println("D:\\file目录不存在,立刻创建该目录");
file.getParentFile().mkdir();
}
//判断1.txt文件是否存在
if (!file.exists()) {
System.out.println("1.txt文件不存在,立刻创建该文件");
file.createNewFile();
}
}
复制代码
マルチレベルファイルの作成
@Test
public void IoFilePractise3() throws IOException {
File file=new File("D:\\file\\B\\B1\\B2\\rose.txt");
//创建多个层级目录
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
//创建rose.txt文件
if(!file.exists()){
file.createNewFile();
}
}
复制代码
ファイルを削除します
指定されたファイルやディレクトリを削除し、それが指定されたディレクトリを削除する場合にのみ、ディレクトリは他のファイルまたはディレクトリが存在する、ということは注目に値する、そして成功を削除する方法はありません
@Test
public void IoFilePractise1() throws IOException {
File file = new File("D:\\file\\A\\jack.txt");
//在上一个例子的基础上,创建A目录和jack.txt文件
file.getParentFile().mkdir();
file.createNewFile();
//尝试直接删除A目录
file.getParentFile().delete();
//判断是否删除A目录成功
if (file.getParentFile().exists()) {
System.out.println("A目录没有被删除");
} else {
System.out.println("删除A目录成功");
}
}
复制代码
@Test
//根据上面的为基础
public void IoFilePractise2() {
File file = new File("D:\\file\\A\\jack.txt");
file.delete();
file.getParentFile().delete();
//判断是否删除A目录成功
if (file.getParentFile().exists()) {
System.out.println("A目录没有被删除");
} else {
System.out.println("删除A目录成功");
}
}
复制代码
出力ファイルのディレクトリ
txtファイルのすべてと輸出統計との数を識別するための名前を、以下のすべてのファイルと出力統計Dドライブの数
private static int fileNumber = 0;
private static int txtFileNumber = 0;
private static int directoryNumber = 0;
@Test
public void IoFilePractise4() {
String filePath = "D:\\";
findFile(filePath);
System.out.println("文件数:" + fileNumber);
System.out.println("其中txt文件数:" + txtFileNumber);
System.out.println("文件目录数:" + directoryNumber);
}
public void findFile(String filePath) {
File file = new File(filePath);
//遍历该路径下面的所有文件和目录
File[] listFile = file.listFiles();
//如果文件目录下面没有文件递归停止
if(listFile==null)return;
//递归遍历
for (File fileTemp : listFile) {
//如果是文件
if (fileTemp.isFile()) {
fileNumber++;
System.out.println(fileTemp.getName() + "为文件");
if (fileTemp.getName().endsWith(".txt")) {
txtFileNumber++;
System.out.println(fileTemp.getName() + "同时为txt文件");
}
} else if (fileTemp.isDirectory()) {
directoryNumber++;
System.out.println(fileTemp.getName() + "为文件目录");
findFile(fileTemp.getPath());
}
}
}
复制代码
IO基本的なカテゴリ
ほとんどのサブカテゴリ方法は、サブクラスを使用して、明確に理解するために、親クラスのメソッドが解決され、親クラスから継承されます
InputStreamクラス
方法 | メソッドの紹介 |
---|---|
パブリック抽象int型の読み取り() | データを読みます |
公共int型の読み取り(バイトb []) | バイト配列内の読み出しデータ |
公共int型の読み取り(バイトb []、int型のlen、オフINT) | 長さlenバイトをバイト配列に最初のデータから位置を読み取ります |
公共ボイド近いです() | 完成読み、ストリームを閉じて、リソースを解放 |
OutputStreamクラス
方法 | メソッドの紹介 |
---|---|
パブリック抽象ボイド書き込み(int型B) | バイトを書きます |
公共ボイド書き込み(バイトb []) | すべての書き込みバイト配列 |
公共ボイド書き込み(バイトb []、オフのint型、int型のLEN) | オフ位置からスタートバイト配列、書き込まれたlenバイト |
公共ボイド近いです() | 出力ストリームを閉じ、ストリームが閉じられた後に、出力データをすることはできません |
リーダークラス
方法 | メソッドの紹介 |
---|---|
公共int型の読み取り() | 単一の文字を読みます |
公共int型リード(CHAR CBUF []) | 指定されたchar配列に文字を読み込み |
抽象的な公共のint型の読み取り(文字CBUF []、オフのint型、int型のlen) | char配列に文字の長さlenから位置を読み取ります |
抽象ます。public void近いです() | 閉じるフローリリース関連リソース |
ライター类
方法 | メソッドの紹介 |
---|---|
公共ボイド書き込み(int型のC) | 文字を書きます |
公共ボイド書き込み([] CBUF文字) | 文字の配列を書き込みます |
抽象ます。public void書き込み(文字CBUF []、オフのint型、int型のLEN) | オフ位置文字の配列から文字のLEN番号を書き込みます |
抽象ます。public void近いです() | 出力ストリームを閉じ、ストリームが閉じられた後に、出力データをすることはできません |
FileInputStreamの和のFileOutputStream
バイトでバイトを読みます
@Test
public void FileRead() throws IOException {
int count=0;//读取次数
FileInputStream fis = new FileInputStream("D:\\file\\1.txt");
int len;
//一个字节一个字节的读取,读完返回-1
while ((len = fis.read()) != -1) {
System.out.print((char)len);
count++;
}
System.out.println("读取次数:"+count);
fis.close();
}
复制代码
読み出しバイトの複数
@Test
public void FileRead() throws IOException {
int count=0;//读取次数
FileInputStream fis = new FileInputStream("D:\\file\\1.txt");
byte[] n=new byte[1024];
int len;
//一个字节一个字节的读取,读完返回-1
while ((len = fis.read(n)) != -1) {
//new String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String
System.out.println(new String(n,0,len));
count++;
}
System.out.println("读取次数:"+count);
fis.close();
}
复制代码
ファイル書き込み
@Test
public void FileWrite() throws IOException {
//追加写入
FileOutputStream fos=new FileOutputStream("D:\\file\\1.txt",true);
//写入单个字节
fos.write(98);
//写入多个字节
fos.write(",Hello World!".getBytes());
fos.close();
}
复制代码
ファイルのコピー
@Test
//1.txt的数据写入到2.txt
public void FileCopy() throws IOException {
//没有1.txt和2.txt文件需要提前创建
FileOutputStream fos=new FileOutputStream("D:\\file\\2.txt");
FileInputStream fis=new FileInputStream("D:\\file\\1.txt");
int len;
byte[] n=new byte[1024];
while((len=fis.read(n))!=-1){
fos.write(n,0,len);
}
fos.close();
fis.close();
}
复制代码
BuffereInputStream和BuffereOutputStream
ストリームコピーバッファ
@Test
public void FileBuffer() throws IOException {
//里面需要有FileInputStream和FileOutStream的对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\file\\1.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\file\\2.txt"));
int len;
while((len = bis.read()) != -1){
bos.write(len);
}
bos.close();
bis.close();
}
复制代码
InputStreamReaderの和のOutputStreamWriter
中国のコピーで
@Test
public void FileStream() throws IOException {
//补充:一个字符在GBK编码下占2个字节,即16位,在UTF-8编码下占三个字节,即24位
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\file\\1.txt"),"GBK");
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\file\\2.txt"),"GBK");
int len;
char[] n=new char[1014];
while((len= isr.read(n))!=-1){
System.out.println(new String(n,0,len));
osw.write(n,0,len);
}
isr.close();
osw.close();
}
复制代码
ObjectInputStreamの和にObjectOutputStream
ObjectOutputStreamのは、実際に財産の対象に加えた場合、それ以外の場合は可能シリアライズとデシリアライズではありません、Serializableインタフェースを実装する必要があり、ObjectInputStreamのは、実際のシリアル化を達成するために対流での動作をデシリアライズ、対流で操作をシリアル化過渡およびstaticキーワードは、その後、プロパティがシリアライズされません。
オブジェクトを書き込み、読み出し
import java.io.Serializable;
public class Book implements Serializable {
private String id;
private String name;
private int money;
private transient int weight;
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", money=" + money +
", weight=" + weight +
'}';
}
public Book(String id, String name, int money, int weight) {
this.id = id;
this.name = name;
this.money = money;
this.weight = weight;
}
----- getter and setter-----
}
@Test
public void ObjectTest() throws IOException, ClassNotFoundException {
//先写入对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\file\\1.txt", true));
oos.writeInt(99);
oos.writeObject(new Book("001", "我的中国梦", 100,45));
oos.close();
//再读取对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\file\\1.txt"));
int readInt = ois.readInt();
Book book = (Book) ois.readObject();
System.out.println(readInt);
System.out.println(book);
ois.close();
}
复制代码
エンディング
Javaの初心者として、IOはほとんどこの点を理解し、後者は常に実際の関心やプロジェクトに基づいて学習する必要があるかもしれません。私はあなたが上記の書かれている場所を指摘したくない場合は、ブログは主に心理を研究する目的で書き、まだ学校、貧しい基礎Javaで、また、Javaの初心者です。