Nach der Arbeit änderte sich die verwendete Technologie mit den Änderungen des Projekts, manchmal C#, manchmal Java und natürlich einige andere fragmentierte Technologien. Insgesamt dauert C# länger, gefolgt von Java. Ich habe keine Vorliebe für Sprachen. Eine Sprache, die funktionieren kann, ist eine gute Sprache. Und aus objektorientierter Sicht gibt es für mich meiner Meinung nach keinen Unterschied zwischen C# und Java.
In diesem Artikel wird hauptsächlich auf den Inhalt von E/A-Operationen in Java eingegangen. E/A ist ebenfalls in zwei Typen unterteilt: sequentielles Lesen und zufälliges Lesen.
Schauen wir uns zunächst das sequentielle Lesen an. Es gibt zwei Möglichkeiten, das sequentielle Lesen durchzuführen. Die eine ist ein Eingabe- und Ausgabestream, der mit Bytes arbeitet Ströme der Operation.
Nachfolgend zeichnen wir die Struktur von InputStream
FileInputStream: Betreibt Dateien, wird oft zusammen mit BufferedInputStream verwendet
PipedInputStream: kann für die Kommunikation zwischen Threads verwendet werden
ObjectInputStream: kann zur Objektserialisierung verwendet werden
ByteArrayInputStream: Wird zur Verarbeitung der Eingabe von Byte-Arrays verwendet
LineNumberInputStream: kann die aktuelle Zeilennummer ausgeben und im Programm ändern
Das Folgende ist die Struktur von OutputStream
PrintStream: Bietet ähnliche Schnittstellen wie print und println zur Ausgabe von Daten
Schauen wir uns an, wie Sie Stream zum Bedienen von Eingabe und Ausgabe verwenden.
Lesen von Dateien mit InputStream
Kopieren Sie den Codecode wie folgt:
Verwenden Sie FileInputStream, um Dateiinformationen zu lesen
öffentliches statisches Byte[] readFileByFileInputStream(File file) löst eine IOException aus
{
ByteArrayOutputStream Ausgabe = new ByteArrayOutputStream();
FileInputStream fis = null;
versuchen
{
fis = new FileInputStream(file);
byte[] buffer = neues byte[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
Output.write(buffer, 0, bytesRead);
}
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Lesen auf " + file.getAbsoluteFile());
}
Endlich
{
if (fis !=null) fis.close();
if (Ausgabe !=null) Ausgabe.close();
}
Rückgabeausgabe.toByteArray();
}
Lesen von Dateien mit BufferedInputStream
Kopieren Sie den Codecode wie folgt:
public static byte[] readFileByBufferedInputStream(File file) löst eine Ausnahme aus
{
FileInputStream fis = null;
BufferedInputStream bis = null;
ByteArrayOutputStream Ausgabe = new ByteArrayOutputStream();
versuchen
{
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
byte[] buffer = neues byte[1024];
int bytesRead = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
Output.write(buffer, 0, bytesRead);
}
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Lesen auf " + file.getAbsoluteFile());
}
Endlich
{
if (fis != null) fis.close();
if (bis != null) bis.close();
if (output != null) output.close();
}
Rückgabeausgabe.toByteArray();
}
Kopieren Sie Dateien mit OutputStream
Kopieren Sie den Codecode wie folgt:
Kopieren Sie Dateien mit FileOutputStream
public static void copyFileByFileOutputStream(File file) löst eine IOException aus
{
FileInputStream fis = null;
FileOutputStream fos = null;
versuchen
{
fis = new FileInputStream(file);
fos = new FileOutputStream(file.getName() + „.bak“);
byte[] buffer = neues byte[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer,0,buffer.length)) != -1)
{
fos.write(buffer, 0, bytesRead);
}
fos.flush();
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Kopieren auf " + file.getAbsoluteFile());
}
Endlich
{
if (fis != null) fis.close();
if (fos != null) fos.close();
}
}
Kopieren Sie den Codecode wie folgt:
Kopieren Sie Dateien mit BufferedOutputStream
public static void copyFilebyBufferedOutputStream(File file) löst eine IOException aus
{
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
versuchen
{
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(file.getName() + ".bak");
bos = new BufferedOutputStream(fos);
byte[] buffer = neues byte[1024];
int bytesRead = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
bos.write(buffer, 0, bytesRead);
}
bos.flush();
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Kopieren auf " + file.getAbsoluteFile());
}
Endlich
{
if (fis != null) fis.close();
if (bis != null) bis.close();
if (fos != null) fos.close();
if (bos != null) bos.close();
}
}
Der Code hier behandelt Ausnahmen sehr unvollständig. Wir werden später einen vollständigen und strengen Code geben.
Werfen wir einen Blick auf die Struktur von Reader
Der Reader entspricht hier grundsätzlich dem InputStream.
Die Struktur von Writer ist wie folgt
Schauen wir uns einige Beispiele für die Verwendung von Reader oder Writer an
Verwenden Sie Reader, um Dateiinhalte zu lesen
Kopieren Sie den Codecode wie folgt:
Verwenden Sie BufferedReader, um Dateiinhalte zu lesen
public static String readFile(String file) löst eine IOException aus
{
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
versuchen
{
br = new BufferedReader(new FileReader(file));
String line = null;
while((line = br.readLine()) != null)
{
sb.append(line);
}
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Lesen der + Datei auf);
}
Endlich
{
if (br != null) br.close();
}
return sb.toString();
}
Kopieren Sie Dateien mit Writer
Kopieren Sie den Codecode wie folgt:
Kopieren Sie Dateien mit BufferedWriter
public static void copyFile(String file) löst eine IOException aus
{
BufferedReader br = null;
BufferedWriter bw = null;
versuchen
{
br = new BufferedReader(new FileReader(file));
bw = new BufferedWriter(new FileWriter(file + „.bak“));
String line = null;
while((line = br.readLine())!= null)
{
bw.write(line);
}
}
Catch (Ausnahme ex)
{
System.out.println("Fehler tritt beim Kopieren auf " + Datei);
}
Endlich
{
if (br != null) br.close();
if (bw != null) bw.close();
}
}
Schauen wir uns an, wie man zufälligen Zugriff auf Dateien durchführt. RandomAccessFile wird hauptsächlich in Java verwendet, um zufällige Operationen an Dateien durchzuführen.
Erstellen Sie eine Datei mit fester Größe
Kopieren Sie den Codecode wie folgt:
Erstellen Sie Dateien mit fester Größe
public static void createFile(String file, int size) löst eine IOException aus
{
Dateitemp = neue Datei(Datei);
RandomAccessFile raf = new RandomAccessFile(temp, "rw");
raf.setLength(size);
raf.close();
}
Schreiben Sie zufällige Daten in eine Datei
Kopieren Sie den Codecode wie folgt:
Fügen Sie zufällige Daten in eine Datei ein
public static void writeFile(String file, byte[] content, int startPos, int contentLength) löst eine IOException aus
{
RandomAccessFile raf = new RandomAccessFile(new File(file), "rw");
raf.seek(startPos);
raf.write(content, 0, contentLength);
raf.close();
}
Schauen wir uns als Nächstes einige andere gängige Vorgänge an
Dateien verschieben
Kopieren Sie den Codecode wie folgt:
Dateien verschieben
public static boolean moveFile(String sourceFile, String destFile)
{
Dateiquelle = neue Datei(sourceFile);
if (!source.exists()) throw new RuntimeException("Quelldatei existiert nicht.");
File dest = new File(destFile);
if (!(new File(dest.getPath()).exists())) new File(dest.getParent()).mkdirs();
return source.renameTo(dest);
}
Dateien kopieren
Kopieren Sie den Codecode wie folgt:
Dateien kopieren
public static void copyFile(String sourceFile, String destFile) löst eine IOException aus
{
Dateiquelle = neue Datei(sourceFile);
if (!source.exists()) throw new RuntimeException("Datei existiert nicht.");
if (!source.isFile()) throw new RuntimeException("Es ist keine Datei.");
if (!source.canRead()) throw new RuntimeException("Datei konnte nicht gelesen werden.");
File dest = new File(destFile);
if (dest.exists())
{
if (dest.isDirectory()) throw new RuntimeException("Ziel ist ein Ordner.");
anders
{
dest.delete();
}
}
anders
{
File parentFolder = new File(dest.getParent());
if (!parentFolder.exists()) parentFolder.mkdirs();
if (!parentFolder.canWrite()) throw new RuntimeException("Ziel kann nicht geschrieben werden.");
}
FileInputStream fis = null;
FileOutputStream fos = null;
versuchen
{
fis = new FileInputStream(source);
fos = new FileOutputStream(dest);
byte[] buffer = neues byte[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
fos.write(buffer, 0, bytesRead);
}
fos.flush();
}
Catch(IOException ex)
{
System.out.println("Beim Kopieren ist ein Fehler aufgetreten " + sourceFile);
}
Endlich
{
if (fis != null) fis.close();
if (fos != null) fos.close();
}
}
Ordner kopieren
Kopieren Sie den Codecode wie folgt:
Ordner kopieren
public static void copyDir(String sourceDir, String destDir) löst eine IOException aus
{
Dateiquelle = neue Datei(Quellenverzeichnis);
if (!source.exists()) throw new RuntimeException("Quelle existiert nicht.");
if (!source.canRead()) throw new RuntimeException("Quelle konnte nicht gelesen werden.");
File dest = new File(destDir);
if (!dest.exists()) dest.mkdirs();
File[] arrFiles = source.listFiles();
for(int i = 0; i < arrFiles.length; i++)
{
if (arrFiles[i].isFile())
{
BufferedReader reader = new BufferedReader(new FileReader(arrFiles[i]));
BufferedWriterwriter = new BufferedWriter(new FileWriter(destDir + "/" + arrFiles[i].getName()));
String line = null;
while((line = reader.readLine()) != null) write.write(line);
Writer.flush();
reader.close();
Writer.close();
}
anders
{
copyDir(sourceDir + „/“ + arrFiles[i].getName(), destDir + „/“ + arrFiles[i].getName());
}
}
}
Ordner löschen
Kopieren Sie den Codecode wie folgt:
Ordner löschen
public static void del(String filePath)
{
Datei file = new File(filePath);
if (file == null || !file.exists()) return;
if (file.isFile())
{
file.delete();
}
anders
{
File[] arrFiles = file.listFiles();
if (arrFiles.length > 0)
{
for(int i = 0; i < arrFiles.length; i++)
{
del(arrFiles[i].getAbsolutePath());
}
}
file.delete();
}
}
Ordnergröße ermitteln
Kopieren Sie den Codecode wie folgt:
Ordnergröße ermitteln
public static long getFolderSize(String dir)
{
lange Größe = 0;
Datei file = neue Datei(dir);
if (!file.exists()) throw new RuntimeException("dir does not exist.");
if (file.isFile()) return file.length();
anders
{
String[] arrFileName = file.list();
for (int i = 0; i < arrFileName.length; i++)
{
size += getFolderSize(dir + "/" + arrFileName[i]);
}
}
Rückgabegröße;
}
Teilen Sie große Dateien in mehrere kleine Dateien auf
Kopieren Sie den Codecode wie folgt:
Teilen Sie große Dateien in mehrere kleinere Dateien auf
public static void splitFile(String filePath, long unit) löst eine IOException aus
{
Datei file = new File(filePath);
if (!file.exists()) throw new RuntimeException("Datei existiert nicht.");
long size = file.length();
if (Einheit >= Größe) return;
int count = Größe % Einheit == 0 ? (int)(Größe/Einheit) : (int)(Größe/Einheit) + 1;
String newFile = null;
FileOutputStream fos = null;
FileInputStream fis =null;
byte[] buffer = neues byte[(int)unit];
fis = new FileInputStream(file);
lange StartPos = 0;
String countFile = filePath + "_Count";
PrintWriterwriter = new PrintWriter(new FileWriter( new File(countFile)));
write.println(filePath + „/t“ + size);
for (int i = 1; i <= count; i++)
{
newFile = filePath + „_“ + i;
startPos = (i - 1) * Einheit;
System.out.println("Creating " + newFile);
fos = new FileOutputStream(new File(newFile));
int bytesRead = fis.read(buffer, 0, buffer.length);
if (bytesRead != -1)
{
fos.write(buffer, 0, bytesRead);
write.println(newFile + „/t“ + startPos + „/t“ + bytesRead);
}
fos.flush();
fos.close();
System.out.println("StartPos:" + i*unit + "; EndPos:" + (i*unit + bytesRead));
}
Writer.flush();
Writer.close();
fis.close();
}
Mehrere kleine Dateien zu einer großen Datei zusammenführen
Kopieren Sie den Codecode wie folgt:
Mehrere kleine Dateien zu einer großen Datei zusammenführen
public static void linkFiles(String countFile) löst eine IOException aus
{
Datei file = new File(countFile);
if (!file.exists()) throw new RuntimeException("Count file does not exist.");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
String newFile = line.split("/t")[0];
long size = Long.parseLong(line.split("/t")[1]);
RandomAccessFile raf = new RandomAccessFile(newFile, "rw");
raf.setLength(size);
FileInputStream fis = null;
byte[] buffer = null;
while((line = reader.readLine()) != null)
{
String[] arrInfo = line.split("/t");
fis = new FileInputStream(new File(arrInfo[0]));
buffer = new byte[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();
}
Externen Befehl ausführen
Kopieren Sie den Codecode wie folgt:
Externen Befehl ausführen
public static void execExternalCommand(String-Befehl, String-Argument)
{
Prozess Prozess = null;
versuchen
{
Process = Runtime.getRuntime().exec(command + " " + argument);
InputStream ist =process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while((line = br.readLine()) != null)
{
System.out.println(line);
}
}
Catch (Ausnahme ex)
{
System.err.println(ex.getMessage());
}
Endlich
{
if (process != null) process.destroy();
}
}