Setelah bekerja, teknologi yang digunakan berubah seiring dengan perubahan proyek, terkadang C#, terkadang Java, dan tentu saja beberapa teknologi terfragmentasi lainnya. Secara keseluruhan, C# membutuhkan waktu lebih lama, diikuti oleh Java. Saya tidak punya preferensi untuk bahasa. Bahasa yang bisa berfungsi adalah bahasa yang baik. Dan dari perspektif berorientasi objek, menurut saya tidak ada perbedaan antara C# dan Java bagi saya.
Artikel ini terutama mengulas konten yang berkaitan dengan operasi I/O di Java. I/O juga merupakan fitur dasar bahasa pemrograman. I/O di Java dibagi menjadi dua jenis, yang satu adalah pembacaan berurutan dan yang lainnya adalah pembacaan acak.
Mari kita lihat pembacaan berurutan terlebih dahulu. Ada dua cara untuk melakukan pembacaan berurutan. Yang pertama adalah InputStream/OutputStream, yang merupakan aliran input dan output yang beroperasi pada byte; yang lainnya adalah Reader/Writer, yang beroperasi pada karakter input dan output aliran operasi.
Di bawah ini kita menggambar struktur InputStream
FileInputStream: mengoperasikan file, sering digunakan bersama dengan BufferedInputStream
PipedInputStream: dapat digunakan untuk komunikasi antar thread
ObjectInputStream: dapat digunakan untuk serialisasi objek
ByteArrayInputStream: digunakan untuk memproses input array byte
LineNumberInputStream: dapat menampilkan nomor baris saat ini dan dapat dimodifikasi dalam program
Berikut ini adalah struktur OutputStream
PrintStream: Menyediakan antarmuka yang mirip dengan print dan println untuk mengeluarkan data
Mari kita lihat cara menggunakan Stream untuk mengoperasikan input dan output.
Membaca file menggunakan InputStream
Copy kode kodenya sebagai berikut:
Gunakan FileInputStream untuk membaca informasi file
byte statis publik[] readFileByFileInputStream(File file) menampilkan IOException
{
Keluaran ByteArrayOutputStream = ByteArrayOutputStream();
FileInputStream fis = null;
mencoba
{
fis = FileInputStream baru(file);
byte[] penyangga = byte baru[1024];
int byteBaca = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
keluaran.tulis(buffer, 0, byteBaca);
}
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat membaca " + file.getAbsoluteFile());
}
Akhirnya
{
jika (fis !=null) fis.close();
if (keluaran !=null) keluaran.close();
}
kembalikan keluaran.toByteArray();
}
Membaca file menggunakan BufferedInputStream
Copy kode kodenya sebagai berikut:
public static byte[] readFileByBufferedInputStream(File file) memunculkan Pengecualian
{
FileInputStream fis = null;
BufferedInputStream bis = null;
Keluaran ByteArrayOutputStream = ByteArrayOutputStream();
mencoba
{
fis = FileInputStream baru(file);
bis = new BufferedInputStream(fis);
byte[] penyangga = byte baru[1024];
int byteBaca = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
keluaran.tulis(buffer, 0, byteBaca);
}
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat membaca " + file.getAbsoluteFile());
}
Akhirnya
{
jika (fis != null) fis.close();
jika (bis != null) bis.close();
jika (keluaran != null) keluaran.close();
}
kembalikan keluaran.toByteArray();
}
Salin file menggunakan OutputStream
Copy kode kodenya sebagai berikut:
Salin file menggunakan FileOutputStream
public static void copyFileByFileOutputStream(File file) memunculkan IOException
{
FileInputStream fis = null;
FileOutputStream fos = null;
mencoba
{
fis = FileInputStream baru(file);
fos = new FileOutputStream(file.getName() + ".bak");
byte[] penyangga = byte baru[1024];
int byteBaca = 0;
while((bytesRead = fis.read(buffer,0,buffer.length)) != -1)
{
fos.write(buffer, 0, byteBaca);
}
fos.flush();
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat menyalin " + file.getAbsoluteFile());
}
Akhirnya
{
jika (fis != null) fis.close();
jika (fos != null) fos.close();
}
}
Copy kode kodenya sebagai berikut:
Salin file menggunakan BufferedOutputStream
public static void copyFilebyBufferedOutputStream(File file)melemparkan IOException
{
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
mencoba
{
fis = FileInputStream baru(file);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(file.getName() + ".bak");
bos = new BufferedOutputStream(fos);
byte[] penyangga = byte baru[1024];
int byteBaca = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
bos.write(buffer, 0, byteBaca);
}
bos.flush();
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat menyalin " + file.getAbsoluteFile());
}
Akhirnya
{
jika (fis != null) fis.close();
jika (bis != null) bis.close();
jika (fos != null) fos.close();
jika (bos != null) bos.close();
}
}
Kode di sini menangani pengecualian dengan sangat tidak lengkap. Kami akan memberikan kode yang lengkap dan teliti nanti.
Mari kita lihat struktur Reader
Pembaca di sini pada dasarnya berhubungan dengan InputStream.
Struktur Penulis adalah sebagai berikut
Mari kita lihat beberapa contoh penggunaan Reader atau Writer
Gunakan Pembaca untuk membaca konten file
Copy kode kodenya sebagai berikut:
Gunakan BufferedReader untuk membaca isi file
String statis publik readFile(String file) menampilkan IOException
{
BufferedReader br = nol;
StringBuffer sb = StringBuffer baru();
mencoba
{
br = BufferedReader baru(FileReader baru(file));
Garis string = null;
while((baris = br.readLine()) != null)
{
sb.tambahkan(baris);
}
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat membaca "+file);
}
Akhirnya
{
jika (br != null) br.close();
}
kembali sb.toString();
}
Salin file menggunakan Writer
Copy kode kodenya sebagai berikut:
Salin file menggunakan BufferedWriter
public static void copyFile(String file) menampilkan IOException
{
BufferedReader br = nol;
BufferedWriter bw = null;
mencoba
{
br = BufferedReader baru(FileReader baru(file));
bw = new BufferedWriter(fileWriter baru(file + ".bak"));
Garis string = null;
while((baris = br.readLine())!= null)
{
bw.write(baris);
}
}
menangkap (Pengecualian ex)
{
System.out.println("Terjadi kesalahan saat menyalin "+file);
}
Akhirnya
{
jika (br != null) br.close();
jika (bw != null) bw.close();
}
}
Mari kita lihat cara melakukan akses acak ke file. RandomAccessFile terutama digunakan di Java untuk melakukan operasi acak pada file.
Buat file dengan ukuran tetap
Copy kode kodenya sebagai berikut:
Buat file berukuran tetap
public static void createFile (file string, ukuran int) menampilkan IOException
{
Suhu file = File baru(file);
RandomAccessFile raf = new RandomAccessFile(temp, "rw");
raf.setLength(ukuran);
raf.close();
}
Menulis data acak ke file
Copy kode kodenya sebagai berikut:
Masukkan data acak ke dalam file
public static void writeFile(String file, byte[] konten, int startPos, int contentLength) melempar IOException
{
RandomAccessFile raf = new RandomAccessFile(File baru(file), "rw");
raf.seek(startPos);
raf.write(konten, 0, panjang konten);
raf.close();
}
Selanjutnya, mari kita lihat beberapa operasi umum lainnya
Pindahkan file
Copy kode kodenya sebagai berikut:
Pindahkan file
moveFile boolean statis publik (String sourceFile, String destFile)
{
Sumber file = File baru(sourceFile);
if (!source.exists()) throw new RuntimeException("file sumber tidak ada.");
File tujuan = File baru(File tujuan);
if (!(File baru(dest.getPath()).exists())) File baru(dest.getParent()).mkdirs();
return source.renameTo(tujuan);
}
Salin file
Copy kode kodenya sebagai berikut:
Salin file
public static void copyFile(String sourceFile, String destFile) menampilkan IOException
{
Sumber file = File baru(sourceFile);
if (!source.exists()) throw new RuntimeException("File tidak ada.");
if (!source.isFile()) throw new RuntimeException("Ini bukan file.");
if (!source.canRead()) throw new RuntimeException("File tidak dapat dibaca.");
File tujuan = File baru(File tujuan);
jika (tujuan.ada())
{
if (dest.isDirectory()) throw new RuntimeException("Tujuan adalah sebuah folder.");
kalau tidak
{
tujuan.hapus();
}
}
kalau tidak
{
File parentFolder = File baru(dest.getParent());
if (!parentFolder.exists()) parentFolder.mkdirs();
if (!parentFolder.canWrite()) throw new RuntimeException("Tujuan tidak dapat ditulis.");
}
FileInputStream fis = null;
FileOutputStream fos = null;
mencoba
{
fis = FileInputStream baru(sumber);
fos = new FileOutputStream(tujuan);
byte[] penyangga = byte baru[1024];
int byteBaca = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
fos.write(buffer, 0, byteBaca);
}
fos.flush();
}
menangkap (IOException ex)
{
System.out.println("Terjadi kesalahan saat menyalin " + sourceFile);
}
Akhirnya
{
jika (fis != null) fis.close();
jika (fos != null) fos.close();
}
}
salin folder
Copy kode kodenya sebagai berikut:
salin folder
public static void copyDir(String sourceDir, String destDir) menampilkan IOException
{
Sumber file = File baru(sourceDir);
if (!source.exists()) throw new RuntimeException("Sumber tidak ada.");
if (!source.canRead()) throw new RuntimeException("Sumber tidak dapat dibaca.");
File tujuan = File baru(destDir);
if (!dest.exists()) dest.mkdirs();
File[] arrFiles = sumber.listFiles();
for(int i = 0; i < arrFiles.panjang; i++)
{
jika (arrFiles[i].isFile())
{
Pembaca BufferedReader = BufferedReader baru(FileReader baru(arrFiles[i]));
Penulis BufferedWriter = BufferedWriter baru(FileWriter baru(destDir + "/" + arrFiles[i].getName()));
Garis string = null;
while((line = reader.readLine()) != null) writer.write(line);
penulis.flush();
pembaca.close();
penulis.close();
}
kalau tidak
{
copyDir(sourceDir + "/" + arrFiles[i].getName(), destDir + "/" + arrFiles[i].getName());
}
}
}
hapus folder
Copy kode kodenya sebagai berikut:
hapus folder
public static void del(String filePath)
{
File file = File baru(filePath);
if (file == null || !file.exists()) kembali;
jika (file.isFile())
{
file.hapus();
}
kalau tidak
{
File[] arrFiles = file.listFiles();
jika (arrFiles.panjang > 0)
{
for(int i = 0; i < arrFiles.panjang; i++)
{
del(arrFiles[i].getAbsolutePath());
}
}
file.hapus();
}
}
Dapatkan ukuran folder
Copy kode kodenya sebagai berikut:
Dapatkan ukuran folder
getFolderSize panjang statis publik (String dir)
{
ukuran panjang = 0;
File file = File baru(dir);
if (!file.exists()) throw new RuntimeException("dir tidak ada.");
if (file.isFile()) mengembalikan file.length();
kalau tidak
{
String[] arrFileName = file.daftar();
untuk (int i = 0; i < arrNamaFile.panjang; i++)
{
ukuran += getFolderSize(dir + "/" + arrFileName[i]);
}
}
ukuran pengembalian;
}
Pisahkan file besar menjadi beberapa file kecil
Copy kode kodenya sebagai berikut:
Pisahkan file besar menjadi beberapa file kecil
public static void splitFile(String filePath, unit panjang) menampilkan IOException
{
File file = File baru(filePath);
if (!file.exists()) throw new RuntimeException("file tidak ada.");
ukuran panjang = file.panjang();
jika (satuan >= ukuran) kembali;
int hitungan = ukuran % satuan == 0 ? (int)(ukuran/satuan) : (int)(ukuran/satuan) + 1;
String File baru = null;
FileOutputStream fos = null;
FileInputStream fis =null;
byte[] buffer = byte baru[(int)unit];
fis = FileInputStream baru(file);
startPos panjang = 0;
String countFile = filePath + "_Count";
Penulis PrintWriter = PrintWriter baru(FileWriter baru( File baru(countFile)));
writer.println(filePath + "/t" + ukuran);
untuk (int i = 1; i <= hitung; i++)
{
File baru = jalur file + "_" + i;
startPos = (i - 1) * satuan;
System.out.println("Membuat " + File baru);
fos = FileOutputStream baru(File baru(File baru));
int bytesRead = fis.read(buffer, 0, buffer.length);
jika (byteBaca != -1)
{
fos.write(buffer, 0, byteBaca);
writer.println(file baru + "/t" + startPos + "/t" + byteBaca);
}
fos.flush();
fos.close();
System.out.println("Pos Awal:" + i*unit + "; EndPos:" + (i*unit + byteBaca));
}
penulis.flush();
penulis.close();
fis.close();
}
Gabungkan beberapa file kecil menjadi satu file besar
Copy kode kodenya sebagai berikut:
Gabungkan beberapa file kecil menjadi satu file besar
public static void linkFiles (String countFile) memunculkan IOException
{
File file = File baru(countFile);
if (!file.exists()) throw new RuntimeException("Hitungan file tidak ada.");
Pembaca BufferedReader = BufferedReader baru (FileReader baru (file));
String baris = reader.readLine();
String newFile = baris.split("/t")[0];
ukuran panjang = Panjang.parseLong(line.split("/t")[1]);
RandomAccessFile raf = new RandomAccessFile(file baru, "rw");
raf.setLength(ukuran);
FileInputStream fis = null;
byte[] penyangga = nol;
while((baris = pembaca.readLine()) != null)
{
String[] arrInfo = baris.split("/t");
fis = FileInputStream baru(File baru(arrInfo[0]));
buffer = byte baru[Integer.parseInt(arrInfo[2])];
long startPos = Long.parseLong(arrInfo[1]);
fis.read(buffer, 0, Integer.parseInt(arrInfo[2]));
raf.seek(startPos);
raf.write(buffer, 0, Integer.parseInt(arrInfo[2]));
fis.close();
}
raf.close();
}
Jalankan perintah eksternal
Copy kode kodenya sebagai berikut:
Jalankan perintah eksternal
public static void execExternalCommand (perintah String, argumen String)
{
Proses proses = null;
mencoba
{
proses = Runtime.getRuntime().exec(perintah + " " + argumen);
InputStream adalah = proses.getInputStream();
BufferedReader br = BufferedReader baru (InputStreamReader baru (adalah));
Garis string = null;
while((baris = br.readLine()) != null)
{
System.out.println(baris);
}
}
menangkap (Pengecualian ex)
{
Sistem.err.println(ex.getMessage());
}
Akhirnya
{
if (proses != null) proses.hancurkan();
}
}