亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java  基礎知識之IO總結

發布時間:2020-10-19 19:23:32 來源:腳本之家 閱讀:133 作者:lqh 欄目:編程語言

java  基礎知識之IO總結

     我計劃在接下來的幾篇文章中快速回顧一下Java,主要是一些基礎的JDK相關的內容。

  工作后,使用的技術隨著項目的變化而變化,時而C#,時而Java,當然還有其他一些零碎的技術。總體而言,C#的使用時間要更長一些,其次是Java。我本身對語言沒有什么傾向性,能干活的語言,就是好語言。而且從面向對象的角度來看,我覺得C#和Java對我來說,沒什么區別。

  這篇文章主要回顧Java中和I/O操作相關的內容,I/O也是編程語言的一個基礎特性,Java中的I/O分為兩種類型,一種是順序讀取,一種是隨機讀取。

  我們先來看順序讀取,有兩種方式可以進行順序讀取,一種是InputStream/OutputStream,它是針對字節進行操作的輸入輸出流;另外一種是Reader/Writer,它是針對字符進行操作的輸入輸出流。

  下面我們畫出InputStream的結構

  java  基礎知識之IO總結

  1. FileInputStream:操作文件,經常和BufferedInputStream一起使用
  2. PipedInputStream:可用于線程間通信
  3. ObjectInputStream:可用于對象序列化
  4. ByteArrayInputStream:用于處理字節數組的輸入
  5. LineNumberInputStream:可輸出當前行數,并且可以在程序中進行修改

  下面是OutputStream的結構

  java  基礎知識之IO總結

PrintStream:提供了類似print和println的接口去輸出數據

  下面我們來看如何使用Stream的方式來操作輸入輸出

使用InputStream讀取文件

使用FileInputStream讀取文件信息
public static byte[] readFileByFileInputStream(File file) throws IOException
{
  ByteArrayOutputStream output = new ByteArrayOutputStream();
  FileInputStream fis = null;
  try
  {
    fis = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
    {
      output.write(buffer, 0, bytesRead);
    }
  }
  catch(Exception ex)
  {
    System.out.println("Error occurs during reading " + file.getAbsoluteFile());
  }
  finally
  {
    if (fis !=null) fis.close();
    if (output !=null) output.close();
  }
  return output.toByteArray();
}

使用BufferedInputStream讀取文件
public static byte[] readFileByBufferedInputStream(File file) throws Exception
{
  FileInputStream fis = null;
  BufferedInputStream bis = null;
  ByteArrayOutputStream output = new ByteArrayOutputStream();
  try
  {
    fis = new FileInputStream(file);
    bis = new BufferedInputStream(fis);
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
    {
      output.write(buffer, 0, bytesRead);
    }
  }
  catch(Exception ex)
  {
    System.out.println("Error occurs during reading " + file.getAbsoluteFile());
  }
  finally
  {
    if (fis != null) fis.close();
    if (bis != null) bis.close();
    if (output != null) output.close();
  }
  return output.toByteArray();
}

使用OutputStream復制文件

使用FileOutputStream復制文件
public static void copyFileByFileOutputStream(File file) throws IOException
{
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try
  {
    fis = new FileInputStream(file);
    fos = new FileOutputStream(file.getName() + ".bak");
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while((bytesRead = fis.read(buffer,0,buffer.length)) != -1)
    {
      fos.write(buffer, 0, bytesRead);
    }
    fos.flush();
  }
  catch(Exception ex)
  {
    System.out.println("Error occurs during copying " + file.getAbsoluteFile());
  }
  finally
  {
    if (fis != null) fis.close();
    if (fos != null) fos.close();
  }
}


使用BufferedOutputStream復制文件
public static void copyFilebyBufferedOutputStream(File file)throws IOException
{
  FileInputStream fis = null;
  BufferedInputStream bis = null;
  FileOutputStream fos = null;
  BufferedOutputStream bos = null;
  try
  {
    fis = new FileInputStream(file);
    bis = new BufferedInputStream(fis);
    fos = new FileOutputStream(file.getName() + ".bak");
    bos = new BufferedOutputStream(fos);
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
    {
      bos.write(buffer, 0, bytesRead);
    }
    bos.flush();
  }
  catch(Exception ex)
  {
    System.out.println("Error occurs during copying " + file.getAbsoluteFile());
  }
  finally
  {
    if (fis != null) fis.close();
    if (bis != null) bis.close();
    if (fos != null) fos.close();
    if (bos != null) bos.close();
  }
}

這里的代碼對異常的處理非常不完整,稍后我們會給出完整嚴謹的代碼。

  下面我們來看Reader的結構

  java  基礎知識之IO總結

  這里的Reader基本上和InputStream能夠對應上。  

  Writer的結構如下

  java  基礎知識之IO總結

  下面我們來看一些使用Reader或者Writer的例子

使用Reader讀取文件內容

使用BufferedReader讀取文件內容
public static String readFile(String file)throws IOException
{
  BufferedReader br = null;
  StringBuffer sb = new StringBuffer();
  try
  {
    br = new BufferedReader(new FileReader(file));
    String line = null;
    
    while((line = br.readLine()) != null)
    {
      sb.append(line);
    }
  }
  catch(Exception ex)
  {
    System.out.println("Error occurs during reading " + file);
  }
  finally
  {
    if (br != null) br.close();
  }
  return sb.toString();
}

使用Writer復制文件

使用BufferedWriter復制文件
public static void copyFile(String file) throws IOException
{ 
  BufferedReader br = null;
  BufferedWriter bw = null;
  try
  {
    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(Exception ex)
  {
    System.out.println("Error occurs during copying " + file);
  }
  finally
  {
    if (br != null) br.close();
    if (bw != null) bw.close();
  }
}

  下面我們來看如何對文件進行隨機訪問,Java中主要使用RandomAccessFile來對文件進行隨機操作。

創建一個大小固定的文件

創建大小固定的文件
public static void createFile(String file, int size) throws IOException
{
  File temp = new File(file);
  RandomAccessFile raf = new RandomAccessFile(temp, "rw");
  raf.setLength(size);
  raf.close();
}

向文件中隨機寫入數據

向文件中隨機插入數據
public static void writeFile(String file, byte[] content, int startPos, int contentLength) throws IOException
{
  RandomAccessFile raf = new RandomAccessFile(new File(file), "rw");
  raf.seek(startPos);
  raf.write(content, 0, contentLength);
  raf.close();
}

  接下里,我們來看一些其他的常用操作

移動文件

移動文件
public static boolean moveFile(String sourceFile, String destFile)
{
  File source = new File(sourceFile);
  if (!source.exists()) throw new RuntimeException("source file does not exist.");
  File dest = new File(destFile);
  if (!(new File(dest.getPath()).exists())) new File(dest.getParent()).mkdirs();
  return source.renameTo(dest);
}

復制文件

復制文件
public static void copyFile(String sourceFile, String destFile) throws IOException
{
  File source = new File(sourceFile);
  if (!source.exists()) throw new RuntimeException("File does not exist.");
  if (!source.isFile()) throw new RuntimeException("It is not file.");
  if (!source.canRead()) throw new RuntimeException("File cound not be read.");
  File dest = new File(destFile);
  if (dest.exists())
  {
    if (dest.isDirectory()) throw new RuntimeException("Destination is a folder.");
    else
    {
      dest.delete();
    }
  }
  else
  {
    File parentFolder = new File(dest.getParent());
    if (!parentFolder.exists()) parentFolder.mkdirs();
    if (!parentFolder.canWrite()) throw new RuntimeException("Destination can not be written.");
  }
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try
  {
    fis = new FileInputStream(source);
    fos = new FileOutputStream(dest);
    byte[] buffer = new 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("Error occurs during copying " + sourceFile);
  }
  finally
  {
    if (fis != null) fis.close();
    if (fos != null) fos.close();
  }
}

復制文件夾

復制文件夾
public static void copyDir(String sourceDir, String destDir) throws IOException
{
  
  File source = new File(sourceDir);
  if (!source.exists()) throw new RuntimeException("Source does not exist.");
  if (!source.canRead()) throw new RuntimeException("Source could not be read.");
  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]));
      BufferedWriter writer = new BufferedWriter(new FileWriter(destDir + "/" + arrFiles[i].getName()));
      String line = null;
      while((line = reader.readLine()) != null) writer.write(line);
      writer.flush();
      reader.close();
      writer.close();
    }
    else
    {
      copyDir(sourceDir + "/" + arrFiles[i].getName(), destDir + "/" + arrFiles[i].getName());
    }
  }
}

刪除文件夾

刪除文件夾
public static void del(String filePath)
{
  File file = new File(filePath);
  if (file == null || !file.exists()) return;
  if (file.isFile())
  {
    file.delete();
  }
  else
  {
    File[] arrFiles = file.listFiles();
    if (arrFiles.length > 0)
    {
      for(int i = 0; i < arrFiles.length; i++)
      {
        del(arrFiles[i].getAbsolutePath());
      }
    }
    file.delete();
  }
}

獲取文件夾大小

獲取文件夾大小
public static long getFolderSize(String dir)
{
  long size = 0;
  File file = new File(dir);
  if (!file.exists()) throw new RuntimeException("dir does not exist.");
  if (file.isFile()) return file.length();
  else
  {
    String[] arrFileName = file.list();
    for (int i = 0; i < arrFileName.length; i++)
    {
      size += getFolderSize(dir + "/" + arrFileName[i]);
    }
  }
  
  return size;
}

將大文件切分為多個小文件

將大文件切分成多個小文件
public static void splitFile(String filePath, long unit) throws IOException
{
  File file = new File(filePath);
  if (!file.exists()) throw new RuntimeException("file does not exist.");
  long size = file.length();
  if (unit >= size) return;
  int count = size % unit == 0 ? (int)(size/unit) : (int)(size/unit) + 1;
  String newFile = null;
  FileOutputStream fos = null;
  FileInputStream fis =null;
  byte[] buffer = new byte[(int)unit];
  fis = new FileInputStream(file);
  long startPos = 0;
  String countFile = filePath + "_Count";
  PrintWriter writer = new PrintWriter(new FileWriter( new File(countFile)));
  writer.println(filePath + "\t" + size);
  for (int i = 1; i <= count; i++)
  {
    newFile = filePath + "_" + i;
    startPos = (i - 1) * unit;
    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);
      writer.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();
}

將多個小文件合并為一個大文件

將多個小文件合并成一個大文件
public static void linkFiles(String countFile) throws IOException
{
  File 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();
}

執行外部命令

執行外部命令
public static void execExternalCommand(String command, String argument)
{
  Process process = null;
  try
  {
    process = Runtime.getRuntime().exec(command + " " + argument);
    InputStream is = process.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;
    while((line = br.readLine()) != null)
    {
      System.out.println(line);
    }
  }
  catch(Exception ex)
  {
    System.err.println(ex.getMessage());
  }
  finally
  {
    if (process != null) process.destroy();
  }
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

星子县| 丽江市| 宝坻区| 图们市| 海丰县| 大冶市| 武乡县| 洛浦县| 沾益县| 额尔古纳市| 余庆县| 铜鼓县| 资阳市| 方山县| 嘉黎县| 吴桥县| 永州市| 江孜县| 梓潼县| 观塘区| 阳曲县| 扎赉特旗| 汉寿县| 津市市| 柳江县| 安岳县| 从化市| 沂水县| 长子县| 开远市| 灯塔市| 泾源县| 遵义县| 凌源市| 安阳市| 康定县| 肃宁县| 荆州市| 称多县| 土默特右旗| 吴堡县|