IOのJavaベースのファイルシステム7

ルールを符号化するコンピュータ情報
コンピュータで、次の原則に従って、データが読み書き込み
ここに画像を挿入説明アラビア数字9を、例えば、書き込みプロセス、ファイルに保存されている二進数にそれらを翻訳し、「カウント」、とにASC2ストップウォッチから、その変換の最初の、上記のプロセスの逆のプロセスのために、読み取りプロセス。

最も一般的に使用される、すなわち、8つのシンボルは、バイナリのバイトと呼ばれている、すなわち、それは8進数が含まれ、バイトの8バイトです
GBKアルファベット文字2バイト1バイトの
UTF。8大世界的に言語に優しい、文字バイトの一部、中国の3バイトの最も

一般的にこの週およびテキストデータを格納するためのメカニズムに従い、

ドキュメントの操作

フォルダを作成します。

File f = new File("f:/xx");
		boolean mkdir = f.mkdir(); // 不能创建多级目录
		System.out.println(mkdir);

フォルダを作成します。

File fs = new File("f:/xx1/yy1");
boolean mkdirs = fs.mkdirs();
System.out.println(mkdirs);

ファイルを作成します。

	File file3 = new File("d:/xx/yy/cls.avi");
	boolean createNewFile = file3.createNewFile();
	System.out.println(createNewFile);

ファイルのファイルかどうかを判別

File file = new File("f:/xx/yy/124.txt");
		boolean ifFile = file.isFile();
		System.out.println(ifFile);  // false

ファイルフォルダかどうかを判別

boolean directory = f.isDirectory();
	System.out.println(directory);   

ファイルへの絶対パスを取得します。

String absolutePath = f.getAbsolutePath();
		System.out.println(absolutePath);
		System.out.println("----------------------------------------");

ファイルの名前を取得します。

	String fName = file.getName();
System.out.println(fName);  // false

ディレクトリ上のファイルオブジェクトを取得します。

File parentFile = file.getParentFile();
System.out.println(parentFile.getAbsolutePath());

親ディレクトリのパス文字列を取得します。

String parent = file.getParent();
System.out.println(parent);

ファイルの長さのバイトを取得します(8ビットbit--)

long length = file.length();
	System.out.println(length);

文字列は、指定されたディレクトリの子ノードを取得します。

File f2 = new File(c);
String[] listFilesString = f2.list();
for(String f1:listFilesString) {
	System.out.println(f1);
}

指定されたディレクトリを取得するためのオブジェクトの子ノードのファイルの説明

File[] listFiles = f2.listFiles();
for(File f1:listFiles) {
	System.out.println(f1.getAbsolutePath());

ファイルを作成します。

	File file3 = new File("d:/xx/yy/cls.avi");
	boolean createNewFile = file3.createNewFile();
	System.out.println(createNewFile);

実際には、あなたが変更パスを与えることができます。ファイルの名前を変更します

	file3.renameTo(new File("d:/xx/yy/bdls.avi"));

ファイルの削除

boolean delete = file3.delete();
	System.out.println(delete);

概念と役割ストリーム

流れの概念
ストリームは、シーケンシャルの集合であり、出発およびバイトの集合で終わる、データ送信または抽象の総称です。2つのデバイス間でデータ伝送が流れ、ストリームデータ伝送の性質上、抽象的、便利なデータ操作がより直感的な流れの様々なタイプのデータ伝送特性と呼ばれています。
分類IOストリーム

:プロセスは、異なるデータタイプに分けている文字ストリームとバイトストリーム

分割されたデータの流れ:入出力ストリーム
、文字ストリームとバイトストリームを

原点文字ストリーム:別のデータとして符号化され、文字の効率的な動作を持つオブジェクトをストリーミングします。実際には、本質的に読み取りバイトストリームに基づいた場合、指定されたコード表を確認してください。バイトストリームと文字ストリームの違い:

異なる(1)書き込み単位:文字の文字ストリームのバイトストリームのバイト(8ビット)単位で、符号表マッピングに従って文字は、複数のバイトを読み取ることができます。

(2)加工が異なる:バイトストリームは、(などの画像、aviファイル、など)あらゆる種類のデータを扱うことができ、文字ストリームは、文字データの種類を扱うことができます。

バッファ自体の動作バイトストリームを使用しない場合(3)は、ファイル自体を直接操作されると、バッファ後の文字列で動作するときに、バッファを介して、使用されますファイル操作は、我々はその下に確認します。

結論:優先バイトストリーム。まず、ハードドライブ上のすべてのファイルが写真やその他のコンテンツを含む、送信または格納されたバイトの形態であるため。しかし、文字はその開発、バイトストリームでは、広く使われている、メモリにのみ形成されることになります。
入出力ストリーム

唯一の入力ストリームを読み取るために、出力ストリームを書き込むことができ、プログラムは、送信するデータの特性に応じて異なるストリームを使用する必要があります。

以下に示すような大規模なシステムなので、いくつかの共通の内部では、我々は、抽出されたそれらを置きますここに画像を挿入説明

FileInputStreamのを使用して読み取りおよび書き込みのファイル

FileInputStreamのは、バイトの読み取りによって、バイト、バイトストリームです

  //		先构造一个fileinputstream的对象
		FileInputStream fis =new FileInputStream( "f:/a.txt");

//	是一个字节流,一个字节一个字节读取
//		用int声明则表示读出的是编译表中的数字,当读的字节读出的int是-1时,则表示读到文件的末尾
		int read=fis.read();
		System.out.println(read);
//		若想得到是实际数据,则应该根据编码规则对其进行转码,用char声明,char代表一个英文字符
		char read1=(char)fis.read();
		System.out.println(read1);

FileInputStreamとのFileOutputStreamバイト配列と読み取りと書き込みのファイルと

読みます

byte[] buf=new byte[9];   //指的是byte数组即字节数组,可以装入6个字节

//	fis.read(buf)	一次读取部分长度的数据,并且读到的数据直接填入buf数组中,返回值是真实读到的字节数量

int num =fis.read(buf);   //返回值num是真实读到的字节数量,当读到文件末尾时候读到的是-1,可用该性质写while循环,不包括换行和空格
String string =new String(buf,0,num);  //将读出的数据转为字符串格式,String(buf,2,4)参数分别为要转为字符串的数组,初始位置,和结束位置
System.out.println(string);
System.out.println(num);
		
//-------------用byte数组和while反复读取------------------------------------------------
/*		byte[] buf=new byte[8];  
		int num=0;
		while( (num=fis.read(buf))!=-1){             //返回值num是真实读到的字节数量,当读到文件末尾时候读到的是-1,可用该性质写while循环,不包括换行和空格
    	String string =new String(buf,0,num);                          //打印的东西包括换行和空格
    	System.out.println(string);
    }
    

    fis.close();

書き込み

FileOutputStream fos=new FileOutputStream("f:/a.txt",true); //加个参数true,则覆盖变为追加
	String string="a你好";
	byte[] bytes=string.getBytes();       //将字符串按指定编码规则--》将信息转化为指定字符串,默认gbk编码
		fos.write(bytes);
		fos.close();

DataOutputStreamのとDataInputStreamの読み取りと書き込みのファイル

DataOutputStreamのパケット・ストリームでは、各種のデータに変換することができるバイト内のバイト、次に使用
DataInputStreamのデータ・タイプ特定のバイトストリームから直接変換することができます。

書き込みファイル
のFileOutputStream書き込みファイル

DataOutputStream dos = new DataOutputStream(new FileOutputStream("d:/o.txt"));
		
		// 写入一个整数  4个字节
		int age = 18;
		//dos.writeInt(age);
		
		// 写一个long   8个字节
		//dos.writeLong(19929);
		
		// 写一个float数据  4个字节
		//dos.writeFloat(18.8f);
		
		// 写一个double数据  8个字节
		//dos.writeDouble(18.8);
		
		// 写一个boolean值,true其实写入了一个1 ,false其实写入了一个0
		//dos.writeBoolean(true);
		
		// writeutf在写真正的数据的同时,会在前面加上2个字节的长度记录
		dos.writeUTF("张铁林");
		dos.writeInt(48);
		
		dos.close();
		

読み込みファイル
のDataInputStreamは、データ型の特定のバイトストリームから直接変換することができ
DataInputStreamをDIS =新しいDataInputStreamの(新しいFileInputStreamを

	//int age = dis.readInt();
	//long readLong = dis.readLong();
	//float readFloat = dis.readFloat();
	
	//double readDouble = dis.readDouble();
	
	//boolean readBoolean = dis.readBoolean();
	
	//String readUTF = dis.readUTF();
	
	String name = dis.readUTF();
	int age = dis.readInt();
	System.out.println(name);
	System.out.println(age);
	Integer.parseInt("1"); 

BufferedWriterのとBufferedReadとの読み取りと書き込みのファイル

文字ストリームの読み取りの効率を向上させるために、バッファリング機構が導入され、一括読み取りと書き込み文字、単一文字の読み書きの効率を向上させます。スピードを加速するために使用される文字を読むためにBufferedReaderの、BufferedWriterのは、書き込み速度を加速するために使用しました

BufferedWriterの

例`

public class BufferedWriterDemo {
public static void main(String[] args) throws Exception {
	 BufferedWriter bfwWriter=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("f:/c.txt",true)));   
	 //自动识别是不是UTF-8
	 //加true参数则是追加,不加则是覆盖
	 bfwWriter.write("66666牛\n呀D!w!!");            //写入字符串
		 bfwWriter.close();            //操作完毕后记住要将流关闭
	
}
}

BufferedRead

`public class BufferedReadDemo {
	public static void main(String[] args) throws Exception {
		

BufferedReader fls= new BufferedReader(new InputStreamReader(new FileInputStream("f:/a.txt"),"UTF-8")); //如果文本包含中文记得加多个参数UTF-8,否则按默认GBK编码格式
//UTF-8对中英文友好,gbk对中文不友好
//BufferedReader包装了字节流,可以将指定的编码集将字节转成字符

//读取第一行
//String line=fls.readLine(); //将文本信息按行填入文件  
//System.out.println(line);    

//读取第二行
//line=fls.readLine();
//System.out.println(line);

while (true) {											//用循环的方式按行读取文件
	String line=fls.readLine();
	if (line==null){break;}
	System.out.println(line);

		
}
fls.close();                         //将流关闭

}`

ワードカウンタを作ります

package ioProject;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

public class Wordcount {public static void main(String[] args) throws Exception, FileNotFoundException {
	BufferedReader fls= new BufferedReader(new InputStreamReader(new FileInputStream("f:/a.txt"),"UTF-8")); //如果文本包含中文记得加多个参数UTF-8,否则按默认GBK编码格式
	HashMap<String,Integer> Wordcount=new HashMap<>();

	while (true) {											//将文本信息按行填入文件,用循环的方式
		String line=fls.readLine();
		if (line==null){break;}
		String[] wordList=line.split(" ");          
		for (String i:wordList){
			if(Wordcount.containsKey(i)){
				Integer count =Wordcount.get(i);
				Wordcount.put(i,count+1);}
			else{Wordcount.put(i,1);}
		}
		
	}
		fls.close();         
	
		Set<Entry<String,Integer>> entrySet =	 Wordcount.entrySet();
		for (Entry x:entrySet){			
			System.out.println("key="+x.getKey()+"&&value="+x.getValue());
			}

		
		
}
}

Javaのシリアライズとデシリアライズ

バイトのJavaオブジェクトの配列を変換するためのJava直列化手段と、デシリアライゼーションJavaバイトシーケンスは、Javaオブジェクトの回収プロセスを指します。

import java.io.Serializable;
//implements Serializable 告诉jdk,这个类的对象是可被序列化的

public class User  implements Serializable {
	
	
	
	String name;
	int age;
	float salary;
	long hairNum;
	
	
	public User(String name, int age, float salary, long hairNum) {
		super();
		this.name = name;
		this.age = age;
		this.salary = salary;
		this.hairNum = hairNum;
	}
	


	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public float getSalary() {
		return salary;
	}
	public void setSalary(float salary) {
		this.salary = salary;
	}
	public long getHairNum() {
		return hairNum;
	}
	public void setHairNum(long hairNum) {
		this.hairNum = hairNum;
	}

	@Override
	public String toString() {
		return "[name=" + name + ", age=" + age + ", salary=" + salary + ", hairNum=" + hairNum + "]";
	}
	


}

インターフェイスクラスは、シリアル化を実装します

直列化可能クラスが実装インタフェース場合は、直列化および非直列化されたオブジェクトのクラスにすることができ
、次の操作と同様に、実装は、このクラスのオブジェクトがシリアライズされ、JDKを伝えるSERIALIZABLE

public class User implements Serializable {    
private String userName; 
private String password; 
}

ObjectInputStreamのObjectOutputStreamの書き込みオブジェクトと、ArrayListを、HashMapの複雑なデータ型、など

オブジェクトの読み取りと書き込み

public class ObjectInputStreamDemo {
	public static void main(String[] args) throws FileNotFoundException, IOException {
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/u.obj"));
		
		User user1 = new User("慕容复", 38, 2800, 8000);
		User user2 = new User("扫地僧", 58, 3800, 0);
		// writeObject(user)方法,要求user对象是可序列化的 
		oos.writeObject(user1);
		oos.writeObject(user2);
		
		oos.close();
				ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/u.obj"));
    
    		User readObject1 = (User) ois.readObject();  //声明为User类
    		User readObject2 = (User) ois.readObject();
    
    		System.out.println(readObject1);
    		System.out.println(readObject2);
    
    		ois.close();
	}

}

読むのArrayList



public class ArrayListObject {
public static void main(String[] args) throws Exception, IOException {
	
	//  将一个list对象直接写入文件
	User user1 = new User("慕容复", 38, 2800, 8000);
	User user2 = new User("扫地僧", 58, 3800, 0);
	
	ArrayList<User> users = new ArrayList<>();
	users.add(user1);
	users.add(user2);
	
	
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/users.list"));
	oos.writeObject(users);
	oos.close();
	
	
	// 从文件中读取一个list对象
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/users.list"));
	ArrayList<User> userList = (ArrayList<User>) ois.readObject();
	System.out.println(userList);
	
	ois.close();

}
}

読むのHashMap


	/**
	 * 直接从文件中读取一个map对象
	 */
	@Test
	public void testReadMap() throws Exception {
	//从文件中写入一个对象
HashMap<String, User> users = new HashMap<>();
		
		User user1 = new User("慕容复", 38, 2800, 8000);
		User user2 = new User("扫地僧", 58, 3800, 0);
		users.put(user1.getName(), user1);
		users.put(user2.getName(), user2);
		
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/users.map"));
		oos.writeObject(users);
		oos.close();

		// 从文件中读取一个list对象
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/users.map"));
		HashMap<String, User> userMap = (HashMap<String, User>) ois.readObject();
		System.out.println(userMap);
	}
	
公開された44元の記事 ウォンの賞賛0 ビュー875

おすすめ

転載: blog.csdn.net/heartless_killer/article/details/97837773