1。ドキュメントエンコーディング
パッケージcom.study.io;/***テストファイルエンコード*/public class encodemo {/*** @param args*/public static void main(string [] args)throws {string s = "study abc well"; byte [] bytes1 = s.getbytes(); // (BYTE B:BYTES1){// BYTES(INT)を変換するプロジェクト(UTF-8)のプロジェクトはSystem.out.Print(integer.tohexString(b&0xff)+""); //&0xffを表示します。英語のバイト */byte [] bytes2 = s.getbytes( "utf-8"); //ここには例外が表示されます。したがって、この例外は(byte b:bytes2){system.out.print(integer.tohexstring(b&0xff)+"");英語で */byte [] bytes3 = s.getbytes( "gbk"); //ここには例外が表示されます。したがって、この例外は(byte b:bytes3){system.out.print(integer.tohexstring(b&0xff)+"");} system.out.out.out.println(); 2バイト*/byte [] bytes4 = s.getbytes( "utf-16be"); //ここには例外が表示されます。バイトシーケンスを文字列に変換したい場合は、このエンコードメソッドを使用する必要があります。そうしないと、Garled Codeが表示されます。 string(bytes4、 "utf-16be"); system.out.println(str2);}}}分析:
* 1。「&0xff」の説明:
* 0xffは16進数を表し(10進数は255)、「111111111」であるバイナリとして表されます。
*次に、&文字はビット数を表します(同じものが1の場合、1を返し、それ以外の場合は0を返します)
* 2。バイトバイトとintタイプ変換:
* integer.tohexstring(b&0xff)ここでは、バイトタイプのbと0xffが最初に実行され、次にinteger.tohexstringが16進数文字列を取得します
* b&0xffの結果はまだintであることがわかります。なぜ0xffで操作を実行する必要があるのですか?直接integer.tohexstring(b);、byteを強制的に変換することはできませんか?答えは不可能です。
*その理由は次のとおりです。1。バイトのサイズは8ビットで、INTのサイズは32ビットです。 2.Javaの2つの補完フォーム
* integer.tohexstringのパラメーターはintです。 &0xffが実行されない場合、バイトがintに変換される場合、intは32ビットで、バイトは8ビットしかないため、現時点では満たされます。 。 。 。 。 。
*したがって、バイトと0xffが関与すると、バイトが最初に整形手術に変換されるため、結果の24ビットが常に0でクリアされるため、結果は常に希望するものです。
* 3.UTF-8エンコーディング:中国人は3バイトを占め、英語は1バイトを占有します
* GBKエンコーディング:中国語は2バイトを占め、英語は1バイトを占有します
* Javaは、ダブルバイトエンコード(つまり、Javaの1つの文字が2バイトを占める)を使用し、UTF-16BEエンコードです。中国人は2バイトを占め、英語は2バイトを占有します
*
* 4.バイトシーケンスが特定のエンコードである場合、バイトシーケンスを文字列に変換する場合は、このエンコード方法も使用する必要があります。
* 5。テキストファイルはバイトシーケンスです。バイトのエンコードされた任意のエンコードされたシーケンスにすることができます。
*中国のマシンでテキストファイルを直接作成する場合、ファイルはANSIエンコードのみを認識します(たとえば、コンピューターで直接テキストファイルを作成します)
2。ファイルクラスの使用
パッケージcom.study.io;インポートjava.io.file;/***ファイルクラスの使用*/public class filedemo {/*java.io.fileクラスはファイルまたはディレクトリを表します。ファイルクラスは、ファイルまたはディレクトリの情報(名前、サイズなど)の情報を表すためにのみ使用され、ファイルコンテンツにアクセスするために使用できません。 */public static void main(string [] args){file file = new file( "d://111"); //ファイルオブジェクトを作成する場合、ディレクトリを指定するためにダブルスラッシュを使用する必要があります。 file( "d:"+file.separator); // system.out.println(file.exists()); // exists()fileまたはフォルダーが存在するかどうかを決定します。 directory} else {file.delete(); //ファイルまたはフォルダーを削除} //ディレクトリisdirectoryであるかどうかを検出します。ディレクトリの場合はtrueを返し、falsesystem.out.println(file.isdirectory(); // file isfilestystem.out.out.out.out.out.Outln(); //表示file file2 = new file( "d:// 222"、 "123.txt"); // common api:system.out.println(file); // file.tostring()system.out.println(file.getabsolutepath(); //絶対パスsystem.out.out.out.out.get name(); System.out.println(file2.getName()); system.out.println(file.getParent()); //親絶対パスsystem.out.println(file2.getParentFile()。getabsolutepath());}}を取得します。実行結果:
説明:
java.io.fileクラスは、ファイルまたはディレクトリを表します
ファイルクラスは、ファイルまたはディレクトリの情報(名前、サイズなど)を表すためにのみ使用され、ファイルコンテンツにアクセスするために使用できません。
一般的に使用されるAPI:
1。ファイルオブジェクトを作成します:ファイルファイル= newファイル(String Path);注:file.seperater(); "/"などのシステム区切り文字を取得します。
2。boolean file.exists();存在します。
3.file.mkdir();またはfile.mkdirs();ディレクトリまたはマルチレベルのディレクトリを作成します。
4.file.isdirectory()は、それがディレクトリであるかどうかを決定します
file.isfile()それがファイルであるかどうかを決定します。
5.file.delete();ファイルまたはディレクトリの削除。
6.file.createNewfile();新しいファイルを作成します。
7.file.getName()ファイル名またはディレクトリ絶対パスを取得します。
8.file.getabsolutepath()は絶対パスを取得します。
9.file.getParent();親の絶対パスを取得します。
1.ディレクトリをトラバースします
パッケージcom.study.io; Import java.io.file; Import java.io.ioexception;/***ファイルツールクラス*は、フィルタリング、トラバースなどのファイルクラスの共通操作をリストします。 dir)throws ioexception {if(!dir.exists()){// exists()メソッドは、ファイルまたはディレクトリが新しいIllegalargumentException( "dir:"+dir+"は存在しない");} if(!dir.isdirectory()){// isdirectory(// isdirectory(// file showine of office of offer file classの使用)を使用しているかどうかを決定するかどうかを決定するかどうかを決定するために使用されます。 IllegalargumentException(dir+"not a directory");}/*string [] filenames = dir.list(); // list()メソッドは、現在のディレクトリ内のサブディレクトリとファイルをリストするために使用されます(サブディレクトリの名前であり、サブディレクリーの内容が含まれていません)。 {system.out.println(string);}*///サブディレクトリで内容を通過する場合は、再帰操作のためにファイルオブジェクトを構築する必要があります。ファイルは、ファイルオブジェクトを直接返すApifileを提供します。 listFiles = dir.listFiles();//Returns an abstraction of the direct subdirectory (file) if(listFiles !=null && listFiles.length >0){for (File file: listFiles) {/*System.out.println(file);*/if(file.isDirectory()){//Recursive listDirectory(file);} else {system.out.println(file);}}}}}}}}}}}}}}}}}}}}}テストクラス:
public class fileutilstest {public static void main(string [] args)throws ioexception {fileutils.listdirectory(new file( "d:// iostudy"));}}}実行結果:
3。RandomAccessFileクラスの使用
RandomAccessFile:Javaは、ファイルのコンテンツへのアクセスを提供します。これは、ファイルの読み取りまたはファイルの書き込みに使用できます。
RandomAccessFileはファイルへのランダムアクセスをサポートし、ファイルの任意の場所にアクセスできます。
Javaファイルモデルに注意してください:
実行結果:
1
12
[65、66、127、-1、-1、-1、127、-1、-1、-1、-42、-48]
7F
ff
ff
ff
7F
ff
ff
ff
D6
D0
4。バイトストリーム(fileinputStream、fileoutputStream)
IOストリームは、入力ストリームと出力ストリームに分割できます。
ここでは、バイトストリームと文字ストリームに分けることができます。
コード例:
パッケージcom.study.io; Import java.io.bufferedinputStream; Import java.io.bufferedoutputStream; Import java.io.file; Import java.io.fileinputStream; Import java.io.fileoutputStream; Import Java.io.ioException;ファイルの読み取りデータの実装* fileoutputStream->バイトデータをファイルに書き込む方法の実装*❤DATA入力および出力ストリーム:* dataOutputStream/datainputStream:「ストリーム」関数を拡張すると、int、long、long、and int、long、and long、and other oper of type* data outputstream writeint( BufferedInputStream&BufferedOutputStream*これら2つのストリームクラスビットIOは、バッファーで操作を提供します。一般に、操作を書いたり読んでいるファイルを開くと、バッファリングが追加されます。このストリームモードにより、IO*のパフォーマンスが向上します。たとえば、アプリケーションからファイルに入力を入力することは、水のシリンダーを別のシリンダーに注ぐのと同等です。FileOutputStream - > write()メソッドは、DataOutputStreamの水を「転送」するのと同等です - > WriteXXX()メソッドはより便利です。最初にバケツにすくい(つまり、バッファ領域)、バケツから別のシリンダーに注ぎます。パフォーマンスが改善されます*/パブリッククラスioutil {/***指定されたファイルのコンテンツを読み取り、16進数のコンソールに出力し、10バイトのラインがブレークされます* @param filename*シングルバイトリーディングは大きなファイルには適していません。 fileInputStream in = new fileInputStream(filename); int b; int i = 1; while(b = in.read())!= -1){/* 0xffは2桁のシステムに置き換えられます。このようにして、キャラクターの下部8ビットが実際に採取されます。 * OXFは15です。15未満は16分の1六分位数に変換されます。 *あなたのコードは2つの固定された16進数になることを望んでいるため、1つだけが生成された場合、ユニット番号に0system.out.print( "0");} // integer.tohexString(b)をstrings integer b)にコンバートする前に、ユニット数に0system.out.print( "0");} // integer.toheger b)を追加する前に0*/if(b <= 0xf){// integer.tohexstring(b)を追加する必要があります。 System.out.print(integer.tohexstring(b)+""); if(i ++%10 == 0){system.out.println();}} in.close(); //ファイルの読み取りは読み取りと書き込み後に閉じている必要があります}/***バッチ読み取りは、ファイルを読むために最も一般的に使用される方法です* @param filename* @param filename* @throws ioexception*/public void void printhexbytearray) ioException {fileInputStream in = new fileInputStream(fileName); byte [] buf = new byte [8* 1024];/* batch read bytes in in in in and bufのバイト配列に入れてください。 in.read(buf、0、buf.length); //一度に読み取り、バイト配列が十分に大きいことを示しますint j = 1; for(int i = 0; i <bytes; i ++){system.out.print(integer.tohexstring(buf [i]&0xff)+""); if(j ++%10 == 0){system.out.println(}}}}*/int bytes = 0; int j = 1; in.read(buf、0、buf.lenghengh)) &0xff*/if(j ++%10 == 0){system.out.println();}}} in.close();}/*** file copy、byte batch read* @param srcfile* @param destfile* @throws ioexception*/public void copyfile (!srcfile.exists()){throw new IllegalargumentException( "file:" + srcfile + "Not exect");} if(!srcfile.isfile()){新しいIllegalargumentexception(srcfile + "not a file");} fileInputStrerm in = fileInputStrem(srcfile + " fileoutputStream(destfile); //ファイルが存在しない場合、直接作成されます。存在する場合は、削除してByte [] buf = new byte [8 * 1024]; // batch read and write int b;を作成します。 while((b = in.read(buf、0、buf.length))すべてが読み取られるときは-1; out.write(buf、0、b); out.flush(); // add} in.close(); out.close();}/*** buffered byte stream* @param srcfile* @param srcfile* @throws ioexception*/public static void copyfilebybuffer(ファイルSRCFILE、ファイルデスフィル) ioException {if(!srcfile.exists()){new lilegalargumentexception( "file:"+srcfile+"not exed");} if(!srcfile.isfile()){Throw new IllegalgumentException(srcfile+"not A");} bufferedinuptionputstrer FileInputStream(srcfile))ファイルのためにバッファリングなしでコピー* @param srcfile* @param destfile* @throws ioexception*/public static void copyfilebybyte(file srcfile、file destfile)throws ioexception {if(!srcfile.exists()){throw emew illegalargumentexception(存在する ");} if(!srcfile.isfile()){new IllegalargumentException(srcfile+" not a file ");} fileInputStream in = new fileInputStream(srcfile); fileoutputStream out = new fileoutputStream(destfile);パラメーターは、読み取りバイトコンテンツを返します。すべての読み取りがすべて返される場合、-1; out.write(c); out.flush();} in.close(); out.close(); out.close();}}}テストクラス:
パッケージcom.study.io;インポートjava.io.file; Import java.io.ioexception; Import org.junit.test; public class ioutiltest {@testpublic void testprinthex(){try {ioutil.printhex( "d://javaio//fileutils.java");} {e.printstacktrace();}}@testpublic void testprinthexbybytearray(){try {long start = system.currenttimemillis(); // 1970年1月1日の現在の時刻と真夜中の時差(ミリセコンドで測定) //ioutil.printhexbybytearray( "e://javaio//fileutils.java");/ioutil.printhex("e://javaio//1.mp3"); ioutil.printhexbybytearray( System.CurrentTimeMillis(); System.out.Println(end -start);} catch(ioException e){e.printstacktrace();}}@testpublic void testcopyfile(){try {ioutil.copyfile(newファイル( "d://javaio//1.txt") file( "d://javaio//1copy.txt"));} catch(ioexception e){e.printstacktrace();}}@testpublic void testcopyfilebuffer(){try {long start = system.currenttimemillis(); file( "e://javaio//1.mp3")、new file( "e://javaio//2.mp3") 10,000 milliseconds*/ioutil.copyfile(new file( "e://javaio//1.mp3")、new file( "e://javaio//4.mp3") {e.printstacktrace();}}} 5。文字ストリーム
パッケージcom.study.io; Import java.io.fileinputstream; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.io.io.inputStreamReader; Import java.io.OutputStreamWriter; fileInputStream( "e://javaio//utf8.txt"); inputstreamReader isr = new inputstreamReader(in、 "utf-8"); //デフォルトプロジェクトエンコーディング。操作するときは、ファイル自体のエンコード形式を記述する必要があります。 fileoutputStream out = new FileOutputStream( "e://javaio//utf81.txt"); outputStreamWriter osw = new outputStreamWriter(out、 "utf-8");/*int c; char [8*1024]; int c;/*バッチ読み取り、バッファ文字配列を置き、0番目の位置から開始し、バッファーの長さをせいぜい長さを置きます。返される文字の数は読み取り文字の数*/while((c = isr.read(buffer、0、buffer.length))!= -1){string s = newですstring(buffer、0、c); system.out.print(s); osw.write(buffer、0、c); osw.flush();} isr.close(); osw.close(); osw.close();}}}}ファイルの読み取りおよび書き込み文字ストリームのストリーム(filereader/filewriter)
文字ストリームのフィルター
6。オブジェクトのシリアル化と脱派化
例:
知らせ: