可能你只想簡單的使用,暫時不想了解太多的知識,那麼請看這裏,瞭解一下如何讀文件,寫文件linux
File file = new File("D:\\test\\t.txt"); //這裏的有兩條斜槓,其實實際的路徑爲D:\test\t.txt,多的那一條斜槓是轉義用的 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "GBK"); //利用以前的File對象,建立了一個`FileInputStream`對象,以後做爲InputStreamReader的構造方法參數傳入 //第二個參數是編碼,通常使用GBK或者是UTF-8 BufferedReader reader = new BufferedReader(inputStreamReader); //把InputStreamReader做爲參數構造一個BufferedReader String s; while((s=reader.readLine())!=null){ System.out.println(s);//循環,將該文件裏面的內容所有打印出來 }
與上面的相似,解釋就很少寫啦windows
File file = new File("Q:\\t.txt"); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK"); BufferedWriter writer = new BufferedWriter(outputStreamWriter); writer.write("hello world"); writer.close();//必需要調用close才能成功地將內容寫入文件
文件不存在的話會自動生成該文件,可是若是是帶有文件夾的話,就得考慮到文件夾不存在的狀況ide
例如:測試
File file = new File("Q:\\test\\t.txt"); File temp = file.getParentFile(); if (!temp.exists()) { temp.mkdirs();//文件夾不存在,則新建一個文件夾 } OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK"); BufferedWriter writer = new BufferedWriter(outputStreamWriter); writer.write("hello world"); writer.close();
這裏使用的是字節流,把t.txt複製到Q盤中的MY文件夾中,並更名編碼
FileInputStream inputStream = new FileInputStream("Q:\\t.txt"); FileOutputStream outputStream = new FileOutputStream("Q:\\MY\\t1.txt"); int c; //讀到尾部則是返回-1 while ((c = inputStream.read()) != -1) { outputStream.write(c); } inputStream.close(); outputStream.close();
PS:這裏和以前同樣,若是文件夾不存在,就得調用mkdirs方法進行建立文件夾的操做,除了txt文件,其餘的文件也是能夠這樣複製url
File對象表明磁盤中實際存在的文件和目錄操作系統
靜態屬性
File.separator 分隔符 windows操做系統是\
,linux操做系統則是/
code
構造方法對象
經常使用方法blog
主要的仍是兩種,字節流和 字符流
全部的文件在硬盤或在傳輸時都是以字節的方式進行,包括圖片等,而字符是隻有在內存中才會造成,因此在開發中,字節流使用較爲普遍。
PidedinputStream
PidedOutputStream
StringReader
StringWriter
上面字節流和字符流通常不會直接使用,實際上,緩衝流是一個裝飾類,能夠給字符流和字節流添加緩衝這功能。
BufferReader
BufferWriter
其實這兩個也是包括在字符流裏面的
使用的時候傳入一個Writer或者是Reader對象便可
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter()); BufferedReader bufferedReader = new BufferedReader(new FileReader());
1. try把reader,writer等對象放在括號內,能夠自動關閉輸入/輸出流,並釋放資源(輸出流會自動調用close方法)
若是有多個資源,使用分號隔開
ps: jdk1.7+支持
例如:
try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(""))){ ... }catch(Excetion e){ ... }
2. 可使用|
來捕獲多個異常
try{ ... }catch(NullPointerException | ArrayIndexOutOfBoundsException e){ //捕獲了兩個異常 }
URL url = new URL("http://wx3.sinaimg.cn/large/00689t5lgy1g11hi5nzmtg30m80jghe3.gif"); URLConnection connection=url.openConnection();//打開連接 InputStream inputStream = connection.getInputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("e:\\wan\\download.gif"))); int c; byte[] temp = new byte[1024 * 2];//提供個緩衝區 while ((c = bufferedInputStream.read(temp)) != -1) { bufferedOutputStream.write(temp,0,c);//讀多少,寫多少 } bufferedOutputStream.close(); inputStream.close();
基本如上面代碼同樣,只是輸出的時候須要使用bufferwriter輸出
序列化和反序列化
序列化:把內存中的序列對象保存在二進制文件中
反序列化:把二進制文件讀取,得到原來的文件
須要類實現序列化接口serializable
標識接口裏面沒有任何的內容
transient關鍵字 可讓類的某個屬性在序列化的過程當中不進行寫入
List<Book> books = new ArrayList<>(); for (int i = 0; i < 5; i++) { Book book = new Book("機戰風暴"+i,"亂",56); books.add(book); } ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("e:\\out.bin"))); } catch (IOException e) { e.printStackTrace(); } for (Book book : books) { objectOutputStream.writeObject(book); } objectOutputStream.writeObject(null);//寫入一個null,防止以後出現EOFException objectOutputStream.close(); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("e:\\out.bin"))); Object o = null; try { while ((o = objectInputStream.readObject()) != null) { Book book = (Book) o; System.out.println(book.toString()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } }