El archivo IO en Java7 ha sufrido grandes cambios, y se han introducido muchas clases nuevas específicamente:
import java.nio.file.directorystream; import java.nio.file.filesystem; import java.nio.file.filesystems; import java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; import java.nio.file.attribute; importar; importación; java.nio.file.attribute.posixfilePermissions;
...... espera, para reemplazar el método de operación del archivo IO original basado en java.io.file.
1. Ruta reemplaza el archivo
Una ruta representa una ruta que es jerárquica y compuesta por una secuencia de elementos de directorio y nombre de archivo separados por un separador o delimitador especial.
La ruta se usa para representar rutas y archivos de archivos. Hay varias formas de construir un objeto de ruta para representar una ruta de archivo o un archivo:
1) En primer lugar, hay dos métodos estáticos de las rutas de clase final. Cómo construir un objeto de ruta a partir de una cadena de ruta:
Ruta ruta = raths.get ("c:/", "xmp"); Ruta rath2 = raths.get ("c:/xmp"); Uri u = uri.create ("archivo: /// c:/xmp/dd"); Ruta p = ruta.get (u);2) Construcción de sistemas de archivos:
Ruta path3 = filesystems.getDefault (). GetPath ("c:/", "access.log");3) Conversión entre archivo y ruta, conversión entre archivo y URI:
Archivo archivo = nuevo archivo ("c: /my.ini"); path p1 = file.topath (); p1.tofile (); file.touri ();4) Crear un archivo:
Ruta Target2 = Paths.get ("c: //mystuff.txt"); // set <posixfilePermission> permans = posixFilePermissions.FromString ("rw-rw-rw-"); // fileAtTribute <set <posixFilePermission> ATTRS = PosixfilePermissions.asfileAttribute (PermsSeS); if (! files.exists (target2)) files.createFile (target2);} catch (ioException e) {E.PrintStackTrace ();}PosixFilePermission no es compatible con Windows para especificar los permisos de RWX.
5) archivos. NewbufferedReader lee el archivo:
Pruebe {// charset.forname ("gbk") bufferedreader lector = files.newbufferedReader (raths.get ("c: //my.ini"), StandardCharSets.utf_8); Cadena str = nulo; while ((str = lector.readline ())! = null) {system.out.println (str); }} catch (ioException e) {E.PrintStackTrace (); }Puede ver que usar archivos.newbufferedReader es mucho más fácil que el archivo originalinputstream y luego el paquete BufferedReader.
Aquí, si la codificación de carácter especificada es incorrecta, se puede lanzar una excepción o se puede leer un código confuso:
java.nio.charset.malFormedInputexception: Longitud de entrada = 1 en java.nio.charset.coderResult.throwException (coderResult.java:281) en sun.nio.cs.streamdecoder.implread (streamDecoder.Java:339) AT Sun.nio.cs.streamdecoder.read (streamDecoder.java:178) en java.io.inputstreamreader.read (inputStreamReader.java:184) en java.io.bufferederader.fill (buffereder.Java:161) en java.io.iBufferederer.Readerline (BufferedReaderLeader (Buffereder en java.io.bufferedreader.readline (bufferedreader.java:389) en com.coin.test.main (test.java:79)
6) Operación de redacción de archivos:
Pruebe {bufferedwriter escritor = files.newbufferedwriter (raths.get ("c: //my2.ini"), StandardCharSets.utf_8); Writer.write ("Operación de escritura de archivo de prueba"); escritor.flush (); Writer.Close ();} Catch (ioException e1) {e1.printstacktrace ();}7) Traverse una carpeta:
Ruta dir = raths.get ("d: // webworkspace"); try (DirectoryStream <Path> stream = files.newDirectoryStream (dir)) {for (ruta e: stream) {system.out.println (e.getFileName ()); }} catch (ioException e) {} Pry (stream <path> stream = files.list (paths.get ("c:/"))) {iterator <Path> item = stream.iterator (); while (ite.hasnext ()) {ruta pp = item.next (); System.out.println (pp.getFileName ()); }} catch (ioException e) {E.PrintStackTrace (); }Lo anterior está atravesando un solo directorio, no atraviesa todo el directorio. Necesita usar: files.walkfiletree
8) atravesar todo el directorio de archivos:
public static void main (string [] args) lanza ioexception {rath startDir = raths.get ("c: //apache-tomcat-8.0.21"); List <Path> result = new LinkedList <Path> (); Files.walkfiletree (startingDir, new FindJavavisitor (resultado)); System.out.println ("result.size () =" + resultado.size ()); } Clase estática privada FindJavavisitor extiende SimpleFeLevisitor <Path> {Private List <Path> Result; public FindJavavisitor (List <Path> Result) {this.Result = resultado; } @Override Public FileVisitResult VisitFile (archivo Path, BasicFileAtTributes Attrs) {if (file.ToString (). Endswith (". Java")) {result.add (file.getFileName ()); } return FileVisitresult.Continue; }}Tomemos un ejemplo práctico:
public static void main (string [] args) lanza ioexception {rath startDir = raths.get ("f: // upload // imágenes"); // f: // cargar // imágenes // 2 // 20141206 Lista <Thath> Result = new LinkedList <Path> (); Files.walkfiletree (startingDir, new FindJavavisitor (resultado)); System.out.println ("result.size () =" + resultado.size ()); System.out.println ("hecho"); } Clase estática privada FindJavavisitor extiende SimpleFeLevisitor <Path> {Private List <Path> Result; public FindJavavisitor (List <Path> Result) {this.Result = resultado; } @Override public FileVisitresult VisitFile (archivo Path, BasicFileAtTributes Attrs) {String filePath = file.tofile (). GetAbSolutePath (); if (filePath.matches (".*_ [1 | 2] {1} //. (? i) (jpg | jpeg | gif | bmp | png)")) {try {files.deleteifexists (archivo); } catch (ioException e) {E.PrintStackTrace (); } result.add (file.getFileName ()); } return FileVisitresult.Continue; }}Elimine todas las imágenes calificadas en el directorio: filePath.matches (".*_ [1 | 2] {1} //. (? I) (jpg | jpeg | gif | bmp | png)")
public static void main (string [] args) lanza ioexception {rath startDir = raths.get ("f: // 111111 // upload // imágenes"); // f:/111111 // cargar // imágenes // 2 // 20141206 Lista <Path> Result = new LinkedList <Phath> (); Files.walkfiletree (startingDir, new FindJavavisitor (resultado)); System.out.println ("result.size () =" + resultado.size ()); System.out.println ("hecho"); } Clase estática privada FindJavavisitor extiende SimpleFeLevisitor <Path> {Private List <Path> Result; public FindJavavisitor (List <Path> Result) {this.Result = resultado; } @Override public FileVisitresult VisitFile (archivo Path, BasicFileAtTributes Attrs) {String filePath = file.tofile (). GetAbSolutePath (); int ancho = 224; int altura = 300; StringUtils.substringborelast (FilePath, "."); String neowpath = stringUtils.substringborelast (filePath, ".") + "_1". + StringUtils.substringafterlast (filepath, "."); intente {imageUtil.zoomImage (filepath, newpath, ancho, altura); } catch (ioException e) {E.PrintStackTrace (); return FileVisitresult.Continue; } result.add (file.getFileName ()); return FileVisitresult.Continue; }}Genera una miniatura del tamaño especificado para todas las imágenes en el directorio. A.JPG genera A_1.JPG
2. Poderoso java.nio.file.files
1) Crear directorios y archivos:
intente {files.createDirectorios (raths.get ("c: // test")); if (! files.exists (paths.get ("c: // test"))) files.createFile (paths.get ("c: //test/test.txt")); // files.createDirectororios (paths.get ("c: //test/test2.txt");} capt (ioexception e) {e.preintstacktRace ();}Tenga en cuenta que el directorio de creación y los archivos de archivo. Debe tener un directorio antes de poder crear archivos en el directorio.
2) Copia del archivo:
Copiar desde el archivo en el archivo: files.copy (fuente de ruta, destino de ruta, opciones de copia);
Copiar desde la transmisión de entrada al archivo: files.copy (inputStream in, rath objetivo, opciones de copia);
Copiar desde el archivo a la transmisión de salida: files.copy (fuente de ruta, outputStream Out);
intente {files.createDirectorios (raths.get ("c: // test")); if (! files.exists (ratts.get ("c: // test"))) files.createFile (paths.get ("c: //test/test.txt")); // files.createDirectorios (paths.get ("c: //test/test2.txt"); Files.Copy (paths.get ("c: //my.ini"), system.out); Files.Copy (raths.get ("c: //my.ini"), ratts.get ("c: //my2.ini"), StandardCopyOption.replace_Existing); Files.Copy (System.in, Paths.get ("C: //my3.ini"), StandardCopyOption.replace_Existing);} Catch (ioexception e) {E.PrintStackTrace ();}3) Iterer a través de un directorio y carpeta. Se ha introducido anteriormente: files.newdirectorystream, files.walkfiletree
4) Leer propiedades del archivo:
Ruta zip = raths.get (uri); System.out.println (files.getLastModifiedtime (zip)); System.out.println (files.size (zip)); System.out.println (files.issymboliclink (zip)); System.out.println (files.isDirectory (zip)); System.out.println (files.readattributes (zip, "*"));
5) Leer y establecer permisos de archivo:
Perfil de ruta = raths.get ("/home/digdeep/.profile"); PosixFileAtTributes attrs = files.readattributes (perfil, posixFileAtTributes.class); // permiso para leer archivos set <PosixFilePermissions> posixpermissions = attrs.permissions (); posixpermissions.clear (); String propietario = attrs.owner (). GetName (); String Perms = PosixFilePermissions.ToString (PosixPermissions); System.out.Format ("%s%s%n", propietario, perms); PosixPermissions.Add (PosixFilePermission.owner_read); posixpermissions.add (PosixFilePermission.group_read); PosixPermissions.Add (PosixFilePermission.others_read); PosixPermissions.Add (PosixFilePermission.owner_write); Files.setPosixFilePermissions (perfil, PosixPermissions); // Establecer permisos del archivoLa clase de archivos es simplemente potente, y casi todas las propiedades relacionadas de los archivos y directorios tienen la API deseada para admitir. Soy demasiado vago para continuar presentándolo aquí, consulte la documentación de JDK8 para más detalles.
Un ejemplo práctico:
import java.io.bufferedReader; import java.io.bufferedwriter; import java.nio.charset.standardcharsets; import java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; public class; lector = files.newbufferedReader (paths.get ("c: //members.sql"), StandardCharsets.utf_8); Bufferedwriter escritor = files.newbufferedwriter (raths.get ("c: //members3.txt"), StandardCharSets.utf_8); Cadena str = nulo; while ((str = reader.readline ())! = null) {if (str! = null && str.indexof (", cast (0x")! = -1 && str.indexof ("como datetime)! = -1) {string newtr = str.substring (0, str.indexof (", cast (0x ") +") ";"; ";"; Writer.Write (Newstr); escritor.newline (); }} escritor.flush (); escritor.close (); } catch (Exception e) {E.PrintStackTrace (); }}}El escenario es que cuando SQL Server exporta datos, el DatateMe se exportará a un formato binario hexadecimal, como: Cast (0x0000a2a500fc2e4f como DateTime)))))
Por lo tanto, el programa anterior exporta el último campo DatateMe, elimina el Cast (0x0000a2a500fc2e4f como DateTime) para generar un nuevo script SQL que no contiene el valor de campo DateTime. Se usa para importar a MySQL.
A mitad de camino, en realidad hay una mejor manera. El uso de SQL Yog puede importar de manera flexible tablas y datos en SQL Server en MySQL. El uso de la función de exportar datos desde SQL Server es difícil de manejar.
El uso anterior (explicación detallada) basado en la clase de archivos Java y la clase de rutas es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.