亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

基于java Files類和Paths類的用法(詳解)

2024-07-13 10:13:39
字體:
來源:轉載
供稿:網友

Java7中文件IO發生了很大的變化,專門引入了很多新的類:

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.FileAttribute;import java.nio.file.attribute.PosixFilePermission;import java.nio.file.attribute.PosixFilePermissions;

......等等,來取代原來的基于java.io.File的文件IO操作方式.

1. Path就是取代File的

A Path represents a path that is hierarchical and composed of a sequence of directory and file name elements separated by a special separator or delimiter.

Path用于來表示文件路徑和文件??梢杂卸喾N方法來構造一個Path對象來表示一個文件路徑,或者一個文件:

1)首先是final類Paths的兩個static方法,如何從一個路徑字符串來構造Path對象:

Path path = Paths.get("C:/", "Xmp");    Path path2 = Paths.get("C:/Xmp");        URI u = URI.create("file:///C:/Xmp/dd");        Path p = Paths.get(u);

2)FileSystems構造:

Path path3 = FileSystems.getDefault().getPath("C:/", "access.log");

3)File和Path之間的轉換,File和URI之間的轉換:

File file = new File("C:/my.ini");Path p1 = file.toPath();p1.toFile();file.toURI();

4)創建一個文件:

Path target2 = Paths.get("C://mystuff.txt");//   Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-rw-rw-");//   FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(perms);try {  if(!Files.exists(target2))Files.createFile(target2);} catch (IOException e) {  e.printStackTrace();}

windows下不支持PosixFilePermission來指定rwx權限。

5)Files.newBufferedReader讀取文件:

try {//      Charset.forName("GBK")      BufferedReader reader = Files.newBufferedReader(Paths.get("C://my.ini"), StandardCharsets.UTF_8);      String str = null;      while((str = reader.readLine()) != null){        System.out.println(str);      }    } catch (IOException e) {      e.printStackTrace();    }

可以看到使用 Files.newBufferedReader 遠比原來的FileInputStream,然后BufferedReader包裝,等操作簡單的多了。

這里如果指定的字符編碼不對,可能會拋出異常 MalformedInputException ,或者讀取到了亂碼:

java.nio.charset.MalformedInputException: Input length = 1  at java.nio.charset.CoderResult.throwException(CoderResult.java:281)  at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)  at java.io.InputStreamReader.read(InputStreamReader.java:184)  at java.io.BufferedReader.fill(BufferedReader.java:161)  at java.io.BufferedReader.readLine(BufferedReader.java:324)  at java.io.BufferedReader.readLine(BufferedReader.java:389)  at com.coin.Test.main(Test.java:79)

6)文件寫操作:

try {  BufferedWriter writer = Files.newBufferedWriter(Paths.get("C://my2.ini"), StandardCharsets.UTF_8);  writer.write("測試文件寫操作");  writer.flush();  writer.close();} catch (IOException e1) {  e1.printStackTrace();}

7)遍歷一個文件夾:

Path dir = Paths.get("D://webworkspace");    try(DirectoryStream<Path> stream = Files.newDirectoryStream(dir)){      for(Path e : stream){        System.out.println(e.getFileName());      }    }catch(IOException e){          }
try (Stream<Path> stream = Files.list(Paths.get("C:/"))){      Iterator<Path> ite = stream.iterator();      while(ite.hasNext()){        Path pp = ite.next();        System.out.println(pp.getFileName());      }    } catch (IOException e) {      e.printStackTrace();    }

上面是遍歷單個目錄,它不會遍歷整個目錄。遍歷整個目錄需要使用:Files.walkFileTree

8)遍歷整個文件目錄:

public static void main(String[] args) throws IOException{    Path startingDir = Paths.get("C://apache-tomcat-8.0.21");    List<Path> result = new LinkedList<Path>();    Files.walkFileTree(startingDir, new FindJavaVisitor(result));    System.out.println("result.size()=" + result.size());      }    private static class FindJavaVisitor extends SimpleFileVisitor<Path>{    private List<Path> result;    public FindJavaVisitor(List<Path> result){      this.result = result;    }    @Override    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){      if(file.toString().endsWith(".java")){        result.add(file.getFileName());      }      return FileVisitResult.CONTINUE;    }  }

來一個實際例子:

public static void main(String[] args) throws IOException {    Path startingDir = Paths.get("F://upload//images");  // F://upload//images//2//20141206    List<Path> result = new LinkedList<Path>();    Files.walkFileTree(startingDir, new FindJavaVisitor(result));    System.out.println("result.size()=" + result.size());         System.out.println("done.");  }    private static class FindJavaVisitor extends SimpleFileVisitor<Path>{    private List<Path> result;    public FindJavaVisitor(List<Path> result){      this.result = result;    }        @Override    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){      String filePath = file.toFile().getAbsolutePath();          if(filePath.matches(".*_[1|2]{1}//.(?i)(jpg|jpeg|gif|bmp|png)")){        try {          Files.deleteIfExists(file);        } catch (IOException e) {          e.printStackTrace();        }       result.add(file.getFileName());      } return FileVisitResult.CONTINUE;    }  }

將目錄下面所有符合條件的圖片刪除掉:filePath.matches(".*_[1|2]{1}//.(?i)(jpg|jpeg|gif|bmp|png)")

public static void main(String[] args) throws IOException {    Path startingDir = Paths.get("F://111111//upload//images");  // F:/111111//upload//images//2//20141206    List<Path> result = new LinkedList<Path>();    Files.walkFileTree(startingDir, new FindJavaVisitor(result));    System.out.println("result.size()=" + result.size());         System.out.println("done.");  }    private static class FindJavaVisitor extends SimpleFileVisitor<Path>{    private List<Path> result;    public FindJavaVisitor(List<Path> result){      this.result = result;    }        @Override    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){      String filePath = file.toFile().getAbsolutePath();      int width = 224;      int height = 300;      StringUtils.substringBeforeLast(filePath, ".");      String newPath = StringUtils.substringBeforeLast(filePath, ".") + "_1."                       + StringUtils.substringAfterLast(filePath, ".");      try {        ImageUtil.zoomImage(filePath, newPath, width, height);      } catch (IOException e) {        e.printStackTrace();        return FileVisitResult.CONTINUE;      }      result.add(file.getFileName());      return FileVisitResult.CONTINUE;    }  }

為目錄下的所有圖片生成指定大小的縮略圖。a.jpg 則生成 a_1.jpg

2. 強大的java.nio.file.Files

1)創建目錄和文件:

try {  Files.createDirectories(Paths.get("C://TEST"));  if(!Files.exists(Paths.get("C://TEST")))  Files.createFile(Paths.get("C://TEST/test.txt"));//  Files.createDirectories(Paths.get("C://TEST/test2.txt"));} catch (IOException e) {  e.printStackTrace();}

注意創建目錄和文件Files.createDirectories 和 Files.createFile不能混用,必須先有目錄,才能在目錄中創建文件。

2)文件復制:

從文件復制到文件:Files.copy(Path source, Path target, CopyOption options);

從輸入流復制到文件:Files.copy(InputStream in, Path target, CopyOption options);

從文件復制到輸出流:Files.copy(Path source, OutputStream out);

try {  Files.createDirectories(Paths.get("C://TEST"));  if(!Files.exists(Paths.get("C://TEST")))  Files.createFile(Paths.get("C://TEST/test.txt"));// Files.createDirectories(Paths.get("C://TEST/test2.txt"));  Files.copy(Paths.get("C://my.ini"), System.out);  Files.copy(Paths.get("C://my.ini"), Paths.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)遍歷一個目錄和文件夾上面已經介紹了:Files.newDirectoryStream , Files.walkFileTree

4)讀取文件屬性:

Path zip = Paths.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)讀取和設置文件權限:

Path profile = Paths.get("/home/digdeep/.profile");  PosixFileAttributes attrs = Files.readAttributes(profile, PosixFileAttributes.class);// 讀取文件的權限  Set<PosixFilePermission> posixPermissions = attrs.permissions();  posixPermissions.clear();  String owner = attrs.owner().getName();  String perms = PosixFilePermissions.toString(posixPermissions);  System.out.format("%s %s%n", owner, perms);    posixPermissions.add(PosixFilePermission.OWNER_READ);  posixPermissions.add(PosixFilePermission.GROUP_READ);  posixPermissions.add(PosixFilePermission.OTHERS_READ);  posixPermissions.add(PosixFilePermission.OWNER_WRITE);    Files.setPosixFilePermissions(profile, posixPermissions);  // 設置文件的權限

Files類簡直強大的一塌糊涂,幾乎所有文件和目錄的相關屬性,操作都有想要的api來支持。這里懶得再繼續介紹了,詳細參見 jdk8 的文檔。

一個實際例子:

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 StringTools {  public static void main(String[] args) {    try {      BufferedReader reader = Files.newBufferedReader(Paths.get("C://Members.sql"), StandardCharsets.UTF_8);      BufferedWriter writer = Files.newBufferedWriter(Paths.get("C://Members3.txt"), StandardCharsets.UTF_8);      String str = null;      while ((str = reader.readLine()) != null) {        if (str != null && str.indexOf(", CAST(0x") != -1 && str.indexOf("AS DateTime)") != -1) {          String newStr = str.substring(0, str.indexOf(", CAST(0x")) + ")";          writer.write(newStr);          writer.newLine();        }      }      writer.flush();      writer.close();    } catch (Exception e) {      e.printStackTrace();    }  }}

場景是,sql server導出數據時,會將 datatime 導成16進制的binary格式,形如:, CAST(0x0000A2A500FC2E4F AS DateTime))

所以上面的程序是將最后一個 datatime 字段導出的 , CAST(0x0000A2A500FC2E4F AS DateTime) 刪除掉,生成新的不含有datetime字段值的sql 腳本。用來導入到mysql中。

做到半途,其實有更好的方法,使用sql yog可以很靈活的將sql server中的表以及數據導入到mysql中。使用sql server自帶的導出數據的功能,反而不好處理。

以上這篇基于java Files類和Paths類的用法(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲视频中文字幕视频| 伊人久久男人天堂| 欧美成人免费一级人片100| 成人激情视频在线观看| 欧美电影免费观看大全| 国产精品大片wwwwww| 欧美视频免费在线观看| 国产精品午夜视频| 亚洲自拍在线观看| 亚洲精品wwww| 亚洲欧美一区二区三区情侣bbw| 日本成人在线视频网址| 成人欧美一区二区三区在线湿哒哒| 国语自产精品视频在线看一大j8| 日韩美女写真福利在线观看| 国产精品白丝av嫩草影院| 国产欧美精品日韩| 日韩欧美aaa| 亚洲电影av在线| 久久精品色欧美aⅴ一区二区| 国产精品亚洲网站| 国产精品美女www爽爽爽视频| 亚洲成人精品久久| 欧美日本精品在线| 91久久精品视频| 最新日韩中文字幕| 国产亚洲人成网站在线观看| 国产精品视频精品视频| 成人综合国产精品| 国产一区二区三区丝袜| 国产精品久久久亚洲| 亚洲a一级视频| 国产精品igao视频| 国产精品久久久久77777| 97在线精品国自产拍中文| 国产极品jizzhd欧美| 久久激情五月丁香伊人| 成人写真福利网| 欧美精品精品精品精品免费| 538国产精品一区二区免费视频| www.亚洲成人| 亚洲视频免费一区| 中文字幕欧美专区| 欧美日韩国产精品一区二区不卡中文| 一区二区三区视频在线| 国产一区二区三区视频| 91精品视频播放| 国产精品毛片a∨一区二区三区|国| 亚洲第一精品夜夜躁人人爽| 久久精品国产欧美亚洲人人爽| 国产午夜精品美女视频明星a级| 国产99视频精品免视看7| 这里只有精品久久| 日韩在线视频播放| 久热国产精品视频| 国模精品一区二区三区色天香| 中文字幕一精品亚洲无线一区| 2019最新中文字幕| 亚洲影视中文字幕| 高潮白浆女日韩av免费看| 97在线看免费观看视频在线观看| 中文字幕国产亚洲2019| 色噜噜亚洲精品中文字幕| 亚洲综合中文字幕在线| 中国china体内裑精亚洲片| 国产精品一区二区三区久久| 91免费精品视频| 日韩大胆人体377p| 4k岛国日韩精品**专区| 狠狠做深爱婷婷久久综合一区| 亚洲午夜精品视频| 欧美在线视频在线播放完整版免费观看| 欧美激情第1页| 伊人伊成久久人综合网站| 欧美中文字幕在线视频| 久久久久久噜噜噜久久久精品| 中文字幕日韩在线视频| 97视频在线观看网址| 午夜精品一区二区三区av| 精品福利在线看| 精品成人国产在线观看男人呻吟| 国产精品一区二区三区免费视频| 国产精品69久久久久| 欧美大人香蕉在线| 国产成人免费91av在线| 欧美大成色www永久网站婷| 成人激情av在线| 久国内精品在线| 欧美裸体xxxx| 久久久久成人网| 成人字幕网zmw| 亚洲国产高清福利视频| 高清一区二区三区四区五区| 国产在线播放不卡| 国产精品扒开腿做爽爽爽的视频| 亚洲第一页中文字幕| 亚洲国产精品成人精品| 亚洲a在线播放| 日韩av中文字幕在线播放| 国产欧美一区二区三区久久| 久久视频免费在线播放| 亚洲成色777777在线观看影院| 亚洲日本欧美日韩高观看| 92国产精品久久久久首页| 高跟丝袜一区二区三区| 日韩av一区二区在线观看| 精品久久久久久久久国产字幕| 97视频在线观看免费| 色婷婷综合久久久久| 久久精品视频播放| 国产91露脸中文字幕在线| 亚洲第一在线视频| 精品国产依人香蕉在线精品| 久久国产加勒比精品无码| 欧美黄色免费网站| 神马国产精品影院av| 成人在线一区二区| 日韩精品视频在线| www国产精品视频| 久久伊人免费视频| 国产suv精品一区二区| 亚洲成人国产精品| 国产日本欧美一区二区三区| 欧美成人午夜视频| 国产在线播放91| 在线观看欧美视频| 久久精品99无色码中文字幕| 欧美二区乱c黑人| 亚洲欧洲一区二区三区久久| 亚洲最大av在线| 精品亚洲一区二区三区在线播放| 狠狠综合久久av一区二区小说| 国产精品欧美久久久| 国a精品视频大全| 欧美精品video| 黑人与娇小精品av专区| 91在线视频一区| 国产精品久久久久久亚洲影视| 国产精品香蕉av| 欧美激情乱人伦一区| 国产精品丝袜高跟| 国产精品影片在线观看| 国内久久久精品| 亚洲成人中文字幕| 国产精品露脸自拍| 亚洲日本成人女熟在线观看| 在线亚洲国产精品网| 国产精品爽爽爽爽爽爽在线观看| 91在线观看免费高清| 精品欧美aⅴ在线网站| 日韩欧美国产高清91| 国产精品视频1区| 日韩中文有码在线视频| 97碰碰碰免费色视频| 国产精品成熟老女人| 久久香蕉国产线看观看av| 全球成人中文在线| 一本一道久久a久久精品逆3p| 日韩大胆人体377p| 91精品国产综合久久香蕉最新版| 午夜免费在线观看精品视频| 欧美成人性色生活仑片| 欧美做爰性生交视频| 久久99亚洲精品|