ファイルが0と1でできていることを体感する
体は食べたもので ファイルは0と1で できている
コンピュータ上のファイルは0と1の羅列であることを体感するため
バイナリファイルを16進数表現のテキストファイルに変換して
変換した16進数表現のテキストファイルからバイナリファイルに変換する
アスキーアートでもなんでもないが、コンピュータの世界は0と1だなぁと秋の夜長にコーヒー片手にニヤッとするのもたまにはよいかも。
Java11で書いてます。
バイナリファイルから16進数表現のテキストファイルに変換
package jp.co.dna_ltd;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
public class HexStringFromBytes {
public static void main(String[] args){
String base = "D:\\basedir";
//[入力用]バイナリファイル
String inFilePath = base + "\\" + "data.7z";
//[出力用]バイナリ文字列ファイル
String outFilePath = base + "\\" + "data.txt";
//[入力用]バイナリファイル 読込
FileSystem fs = FileSystems.getDefault();
Path inPath = fs.getPath(inFilePath);
String data = "";
try{
byte[] bytes = Files.readAllBytes(inPath);
data = toHexString(bytes);
}catch(IOException e){
e.printStackTrace();
}
//[出力用]バイナリ文字列ファイル 出力
Path outPath = fs.getPath(outFilePath);
// try-with-resourcesで書込ファイルを指定
try(BufferedWriter bw = Files.newBufferedWriter(outPath, Charset.forName("UTF8"))){
bw.write(data);
}catch(IOException e){
e.printStackTrace();
}
}
public static String toHexString(byte[] src){
StringBuilder buf = new StringBuilder();
for(byte srcb: src){
buf.append(String.format("%02X", srcb));
}
return buf.toString();
}
}
16進数表現のテキストファイルからバイナリファイルに変換
package jp.co.dna_ltd;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
// commons-codec ライブラリ必要
public class HexStringToBytes {
public static void main(String[] args) {
String base = "D:\\basedir";
String fileName = "data";
byte[] byteData;
String inFilePath = base + "\\" + fileName + ".txt";
String outFilePath = base + "\\" + fileName + ".7z";
try{
String hexString = stringToBytes(inFilePath);
byteData = Hex.decodeHex(hexString.toCharArray());
FileOutputStream fileOutputStream = new FileOutputStream(outFilePath);
fileOutputStream.write(byteData);
fileOutputStream.flush();
fileOutputStream.close();
}catch(DecoderException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static String stringToBytes(final String p) throws IOException{
return Files.lines(Paths.get(p), Charset.forName("UTF-8"))
.collect(Collectors.joining(System.getProperty("line.separator")));
}
}
Author And Source
この問題について(ファイルが0と1でできていることを体感する), 我々は、より多くの情報をここで見つけました https://zenn.dev/open_sesame/articles/51b7de123fbf8c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol