codestory

Die Anleitung zu Java Commons IO

  1. Die Bibliothek
  2. IOUtils
  3. FileUtils
  4. FilenameUtils
  5. FileSystemUtils
  6. Line iterator
  7. File filters (Der File Filter)
  8. File Comparators (Der File-Vergleicher)
  9. Streams

1. Die Bibliothek

Maven Dependency
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>

2. IOUtils

IOUtils ist eine Utility-Class, um mit den Daten schneller umzugehen. Wenn Sie das Standard java.io vom Java benutzen, können Sie alles, die Sie möchten, machen. Aber wenn Sie die Code schneller schreiben möchten, mehr Zeit sparen, sollen Sie IOUtils benutzen.
Sehen Sie Javadoc vom IOUtils bei:
Sehen Sie eine Code, die in der normalen Weise behandelt wird (die verfügbaren Dinge in JDK verwenden).
InputStream in = new URL("http://commons.apache.org").openStream();
try {
    InputStreamReader inR = new InputStreamReader(in);
    BufferedReader buf = new BufferedReader(inR);
    String line;
    while ((line = buf.readLine()) != null) {
        System.out.println(line);
    }
} finally {
    in.close();
}
Und hier ist die Code mit der Verwendung von class IOUtils:
InputStream in = new URL("http://commons.apache.org").openStream();
try {
    System.out.println(IOUtils.toString(in));
} finally {
    IOUtils.closeQuietly(in);
}
In Vergleich von 2 oben Code: Obwohl sie ein gleiches Ziel tun, ist die Code mit der Verwendung von IOUtils dann wirklich kürzer
ReadURL1.java
package org.o7planning.tutorial.commonsio.io;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class ReadURL1 {

   public static void readURL() throws MalformedURLException, IOException {
       InputStream in = new URL("http://commons.apache.org").openStream();
       try {
           InputStreamReader inR = new InputStreamReader(in);
           BufferedReader buf = new BufferedReader(inR);
           String line;
           while ((line = buf.readLine()) != null) {
               System.out.println(line);
           }
       } finally {
           in.close();
       }
   }

   public static void main(String[] args) {
       try {
           readURL();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}
ReadURL2.java
package org.o7planning.tutorial.commonsio.io;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.IOUtils;

public class ReadURL2 {

   public static void readURL() throws MalformedURLException, IOException {
       InputStream in = new URL("http://commons.apache.org").openStream();
       try {
           System.out.println(IOUtils.toString(in));
       } finally {
           IOUtils.closeQuietly(in);
       }
   }

   public static void main(String[] args) {
       try {
            readURL();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

3. FileUtils

Class FileUtils besteht aus die Utility-Method um mit dem Objekt File zu umgehen. Das sind wie die File lesen,schreiben, kopieren, und vergleichen
Die Javadoc von FileUtils nachschlagen:
FileUtilsReadFile.java
package org.o7planning.tutorial.commonsio.fileutils;


import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;

public class FileUtilsReadFile {

   
   public static void readFile() throws IOException  {
       File file= new File("D:/test.txt");
       List<String>  lines= FileUtils.readLines(file);
       
       for(String s: lines)  {
           System.out.println(s);
       }
   }
   
   public static void main(String[] args) {
       try {
           readFile();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
   
}
FileUtilsTouchFile.java
package org.o7planning.tutorial.commonsio.fileutils;

import java.io.IOException;
import org.apache.commons.io.FileUtils;
import java.io.File;

public class FileUtilsTouchFile {

   public static void main(String[] args) {

       try {
           // E:/test not exist on disk
           File testFile = new File("E:/test.txt");

           // Get last modify time

           long fileTimestamp = testFile.lastModified();
           System.out.println("Time in milis " + fileTimestamp);

           // Using the touch() operation
           // If file not exists, it create file.
           // It change the file date and time stamps
           FileUtils.touch(testFile);

           System.out.println("Time in milis updated "
                   + testFile.lastModified());

       } catch (IOException ex) {
           ex.printStackTrace();
       }

   }
}
Die erste Durchführung (Wenn E:/test.txt in der Festplatte nicht existiert)
Das 2. Mal laufen (Wenn E:/test.txt wird erstellt und die Zeit der Änderung vom letzten Mal gesetzt wird).
Mit FileUtils können Sie einfach die File von einem Ort zu anderem Ort kopieren und kleben oder die File von einem Odner zu anderem Ordner kopieren
FileUtilsCopyDirectory.java
package org.o7planning.tutorial.commonsio.fileutils;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class FileUtilsCopyDirectory {

   public static void main(String[] args) {
       File srcDir = new File("C:/test");
       File destDir = new File("D:/test/abc");
       try {
           FileUtils.copyDirectory(srcDir, destDir);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

}

4. FilenameUtils

Class FilenameUtils hat die nutzliche Method um mit dem Name der file ohne die Verwendung des Objekt File zu arbeiten. Diese Class ist für die Anpassung der Unix und Windows, um das Umwandlungsprozess zwischen die Generalumgebung zu unterstützen (wie von der Umgebung der Entwicklungsprogrammierung zur Umgebung der erledigten Produkt verwandeln).
FilenameUtils javadoc:
Das Beispiel: die 2 Punkte in der Pfad von der File löschen
FilenameUtilsNormalize.java
package org.o7planning.tutorial.commonsio.filenameutils;

import org.apache.commons.io.FilenameUtils;

public class FilenameUtilsNormalize {

   public static void main(String[] args) {
       String filename = "C:/commons/io/../lang/project.xml";
       String normalized = FilenameUtils.normalize(filename);
       System.out.println(normalized);
   }

}
Starten und das Ergebnis bekommen
FilenameUtils hat mehr als 40 Utility-Method. Sie können die Detail im Javadoc sehen

5. FileSystemUtils

Class FileSystemUtils hat die Utility- Method für den Umgang mit dem Dateisystem um die von JDK nicht unterstützten Funktion zuzugreifen. Jetzt hat diese Class nur die Method, um den leeren Raum in dem Laufwerk zu schaffen. Beachten Sie, dass sie den Befehl command line benutzt (keine natütliche Code benutzen (native code)
FileSystemUtilsFreeSpaceKb.java
package org.o7planning.tutorial.commonsio.filesystemutils;

import java.io.IOException;

import org.apache.commons.io.FileSystemUtils;

public class FileSystemUtilsFreeSpaceKb {
   public static void main(String[] args) {
       try {
           Long kb = FileSystemUtils.freeSpaceKb("C:/");
           System.out.println("Free Space: " + kb + "KB");
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

6. Line iterator

Class org.apache.commons.io.LineIterator bietet flexibel, um mit einer Datei nach der Zeile zu arbeiten. Ein Beispiel kann direkt erstellt oder durch die Method von FileUtils oder IOUtils erstellt. Sie sollen verwenden nach der Maßnahme ...:
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
    while (it.hasNext()) {
        String line = it.nextLine();
        // / do something with line
    }
} finally {
    LineIterator.closeQuietly(it);
}
LineIteratorExample.java
package org.o7planning.tutorial.commonsio.lineiterator;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;

public class LineIteratorExample {
   public static void main(String[] args) {
       try {
           File file = new File("D:/test.txt");
           LineIterator it = FileUtils.lineIterator(file, "UTF-8");
           try {
               while (it.hasNext()) {
                   String line = it.nextLine();
                   //
                   if (line != null && line.startsWith("##")) {
                       System.out.println(line.substring(2));
                   }
               }
           } finally {
               LineIterator.closeQuietly(it);
           }
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

7. File filters (Der File Filter)

Die Package org.apache.commons.io.filefilter definiert eine Interface (IOFileFilter), die 2 interface: java.io.FileFilter und java.io.FilenameFilter kombiniert. Außerdem hat sie eine Menge der Implementierungsklasse IOFileFilter damit Sie sie bereit benutzen und sie hat auch die Ultility-Klasse (FileFilterUtils) damit Sie die Filter miteinander zur Erstellung eines neuen Filter kombinieren können. Sie werden zum File-Filtern nach Ihrer Bedarf oder in FileDialog benutzt.
Zum Beispiel: java.io.FileFilter kann benutzt werden um die File nach Ihrem Bedarf in einem Verzeichnis zu filtern. Aber es ist besser wenn Sie die Klasse in der Package org.apache.commons.io.filefilter benutzen. Einige sind verfügbar zu benutzen
Schauen Sie ein Beispiel ohne die Benutzung von org.apache.commons.io.filefilter
FileFilterExample1.java
package org.o7planning.tutorial.commonsio.filefilter;

import java.io.File;
import java.io.FileFilter;

public class FileFilterExample1 {

   public static void main(String[] args) {

       FileFilter filter = new MyFileFilter();

       File dir = new File("C:/test");

       // Get file with extension js or css.
       File[] list = dir.listFiles(filter);

       for (File file : list) {
           System.out.println("File " + file.getAbsolutePath());
       }
   }

   // Filter accept files (*.js , *.css)
   static class MyFileFilter implements FileFilter {

       public boolean accept(File pathname) {
           String abstractPath = pathname.getAbsolutePath();
           
           if (abstractPath.endsWith(".js") || abstractPath.endsWith(".css")) {
               return true;
           }
           return false;
       }

   }
}
 
Und das Beispiel von der Verwendung der Class SuffixFileFilter, liegt in der Package org.apache.commons.io.filefilter
HiddenFileFilterExample.java
package org.o7planning.tutorial.commonsio.filefilter;

import java.io.File;

import org.apache.commons.io.filefilter.HiddenFileFilter;

public class HiddenFileFilterExample {

   public static void main(String[] args) {
       File dir = new File("C:/test");
       String[] files = dir.list(HiddenFileFilter.HIDDEN);
       for (int i = 0; i < files.length; i++) {
           System.out.println(files[i]);
       }
   }
}
FileFilterExample2.java
package org.o7planning.tutorial.commonsio.filefilter;

import java.io.File;
import java.io.FileFilter;

import org.apache.commons.io.filefilter.SuffixFileFilter;

public class FileFilterExample2 {

    public static void main(String[] args) {
        String[] suffixs = new String[] { ".js", ".css" };
        FileFilter filter = new SuffixFileFilter(suffixs);

        File dir = new File("C:/test");
        
        // Get file with extension js or css.
        File[] list = dir.listFiles(filter);

        for (File file : list) {
            System.out.println("File " + file.getAbsolutePath());
        }
    }
}

 
Das Beispiel: Verbindung der 2 Filter
CombineTwoFilterExample.java
package org.o7planning.tutorial.commonsio.filefilter;

import java.io.File;
import java.io.FileFilter;

import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class CombineTwoFilterExample {

    public static void main(String[] args) {

        String[] suffixs = new String[] { ".js", ".css" };
        IOFileFilter filter1 = new SuffixFileFilter(suffixs);
        //
        IOFileFilter filter2 = HiddenFileFilter.VISIBLE;
        //
        // Filter accept file with extension (js,css) and Visible.
        IOFileFilter newFilter = FileFilterUtils
                .andFileFilter(filter1, filter2);

        File dir = new File("C:/test");

        File[] list = dir.listFiles((FileFilter) newFilter);

        for (File file : list) {
            System.out.println("File " + file.getAbsolutePath());
        }

    }
}

 

8. File Comparators (Der File-Vergleicher)

Package org.apache.commons.io.comparator bietet einige Implementierungsclass java.util.Comparator für java.io.File. Die Comparators können die Liste oder ein Array der File ordnen
SizeFileComparatorExample.java
package org.o7planning.tutorial.commonsio.comparator;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.comparator.SizeFileComparator;

public class SizeFileComparatorExample {

    public static void main(String[] args) throws IOException {
        // Current directory
        File directory = new File(".");
        File[] files = directory.listFiles();

        System.out.println("Default order");
        displayFiles(files);

        Arrays.sort(files, SizeFileComparator.SIZE_COMPARATOR);
        System.out
                .println("\nSizeFileComparator.SIZE_COMPARATOR (Ascending, directories treated as 0)");
        displayFiles(files);

        Arrays.sort(files, SizeFileComparator.SIZE_REVERSE);
        System.out
                .println("\nSizeFileComparator.SIZE_REVERSE (Descending, directories treated as 0)");
        displayFiles(files);

        Arrays.sort(files, SizeFileComparator.SIZE_SUMDIR_COMPARATOR);
        System.out
                .println("\nSizeFileComparator.SIZE_SUMDIR_COMPARATOR (Ascending, directory size used)");
        displayFilesWithDirectorySizes(files);

        Arrays.sort(files, SizeFileComparator.SIZE_SUMDIR_REVERSE);
        System.out
                .println("\nSizeFileComparator.SIZE_SUMDIR_REVERSE (Descending, directory size used)");
        displayFilesWithDirectorySizes(files);
    }

    public static void displayFiles(File[] files) {
        for (File file : files) {
            System.out.printf("%-20s Size:" + file.length() + "\n",
                    file.getName());
        }
    }

    public static void displayFilesWithDirectorySizes(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.printf(
                        "%-20s Size:" + FileUtils.sizeOfDirectory(file) + "\n",
                        file.getName());
            } else {
                System.out.printf("%-20s Size:" + file.length() + "\n",
                        file.getName());
            }
        }
    }
}
 
Das Ergebnis von dem Laufen der Class SizeFileComparatorExample:
Default order
.classpath           Size:1431
.project             Size:569
.settings            Size:4096
pom.xml              Size:547
src                  Size:0
target               Size:0
test.txt             Size:0

SizeFileComparator.SIZE_COMPARATOR (Ascending, directories treated as 0)
.settings            Size:4096
src                  Size:0
target               Size:0
test.txt             Size:0
pom.xml              Size:547
.project             Size:569
.classpath           Size:1431

SizeFileComparator.SIZE_REVERSE (Descending, directories treated as 0)
.classpath           Size:1431
.project             Size:569
pom.xml              Size:547
.settings            Size:4096
src                  Size:0
target               Size:0
test.txt             Size:0

SizeFileComparator.SIZE_SUMDIR_COMPARATOR (Ascending, directory size used)
test.txt             Size:0
.settings            Size:489
pom.xml              Size:547
.project             Size:569
.classpath           Size:1431
src                  Size:11307
target               Size:22433

SizeFileComparator.SIZE_SUMDIR_REVERSE (Descending, directory size used)
target               Size:22433
src                  Size:11307
.classpath           Size:1431
.project             Size:569
pom.xml              Size:547
.settings            Size:489
test.txt             Size:0

 

9. Streams

Package org.apache.commons.io.input und org.apache.commons.io.output enthalten einigen Class von der Behandlung der Daten. Sie bestehen aus ...:

Java Grundlagen

Show More