文件操作函数java_java中文件的操作
前言:java的讀寫操作是學java開發的必經之路,Java.io包中包括許多類提供許多有關文件的各個方面操作。下面就來總結下java的讀寫操作。
主要內容如下
1.字節流與字符流的區別
2.文件操作
3文件操作的具體實現
4.實戰:解鎖功能
一. 字節流與字符流的區別:
字節流與字符流主要的區別是他們的的處理方式
字節流是最基本的,采用ASCII編碼,所有的InputStream和OutputStream的子類都是,主要用在處理二進制數據,它是按字節來處理的
但實際中很多的數據是文本,又提出了字符流的概念,采用Unicode編碼.它是按虛擬機的encode來處理,也就是要進行字符集的轉化
這兩個之間通過 InputStreamReader,OutputStreamWriter來關聯,實際上是通過byte[]和String來關聯
字節流 InputStream 輸入 OutputStream 輸出
字符流 Reader 輸入 Writer 輸出
其它的類都是繼承這四個基本類的!
二:文件操作的一些總結:
1 輸入輸出抽象基類InputStream/OutputStream ,實現文件內容操作的基本功能函數read()、 write()、close()、skip()等;一般都是創建出其派生類對象(完成指定的特殊功能)來實現文件讀寫。在文件讀寫的編程過程中主要應該注意異常處理的技術。
2 FileInputStream/FileOutputStream:
用于本地文件讀寫(二進制格式讀寫并且是順序讀寫,讀和寫要分別創建出不同的文件流對象);
本地文件讀寫編程的基本過程為:
① 生成文件流對象(對文件讀操作時應該為FileInputStream類,而文件寫應該為FileOutputStream類);
② 調用FileInputStream或FileOutputStream類中的功能函數如read()、write(int b)等)讀寫文件內容;
③ 關閉文件(close())。
3隨機文件讀寫:
RandomAccessFile類(它直接繼承于Object類而非InputStream/OutputStream類),從而可以實現讀寫文件中任何位置中的數據(只需要改變文件的讀寫位置的指針)。
隨機文件讀寫編程的基本過程為:
① 生成流對象并且指明讀寫類型;
② 移動讀寫位置;
③ 讀寫文件內容;
④ 關閉文件。
三:方法的實現:創建文件、讀取文件、關閉文件等
創建文件:
使用構造方法,如下:
String path = "C:\Users\Administrator\Desktop\java";
File file = new File(path.concat.("/text.txt"));
if(file.exists() == false)
{//不存在就創建
file.createNewFile();
}
2.文件寫入字節流
FileOutputString fos = new FileOutString(file);
byte [] text = {'1','2','3','4'};
fos.write(text);
//操作完就要關閉文件
fos.close();
3.讀取字節流
FileInputString fis = new FileInString(file);
byte [] name =new byte[12];
int count = fis.read(name) ;
//操作完就要關閉文件
fis.close();
4,文件中寫入字符流
FileWriter fw = new FileWriter(file);
char [] name = {'java' ,'開'',發'};
fw.write(name);
fw.close();
5.讀取字符流
FileReader fr= new FileReader(file);
char [] book = new char[4];
fr.close();
6.將文件作為輸入對象:
import java.io.File;
import java.util.Scanner;
public class MyClass {
public static void main(String[] args) throws Exception {
File p = new File("C:\\Users\\Administrator\\Desktop\\java\\java\\java1\\src\\main\\java\\day8\\xt.txt");
Scanner console = new Scanner(p);
while (console.hasNext()){
String input = console.next();
System.out.println(input);
}
console.close();
}
運行結果:
xt.txt中的內容:
四:練習 實現密碼解鎖功能
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOperation {
public static final String PATH= "C:\\Users\\Administrator\\Desktop\\java\\java\\java1\\src\\main\\java\\day8\\Demo1/pwd.txt";
String password;
//單例模式
public static final FileOperation instance = new FileOperation();
private FileOperation(){
try {
load();
}catch (IOException e){
System.out.println("io 異常");
}
}
public void load() throws IOException {
FileInputStream fis = new FileInputStream(PATH);
byte[] pwd = new byte[4];
int count = fis.read(pwd);
if (count == -1){
password = null;
}else{
password = new String(pwd);
}
fis.close();
}
public void save(String password){
try {
FileOutputStream fos = new FileOutputStream(PATH);
fos.write(password.getBytes());
fos.close();
} catch (IOException e){
System.out.println("io異常");
}
}
}
import java.util.Scanner;
public class MyClass {
public static void main(String[] args){
boolean logined =false;
//判斷是否已經登錄
String password = FileOperation.instance.password;
if (password != null){
logined = true;
}
//提示用戶操作
String alert;
if (logined) {
alert = "請輸入密碼";
} else {
alert = "請設置密碼";
}
System.out.println(alert);
String firt = null;
int wrongTime = 3;
while (wrongTime > 0) {
//接收用戶輸入
Scanner scanner = new Scanner(System.in);
String inputPassword = scanner.next();
//判斷操作
if (logined) {
//已經登陸過 直接比較
if (password.equals(inputPassword)) {
System.out.println("解鎖成功");
break;
} else {
System.out.println("解鎖失敗 請重新輸入");
wrongTime--;
}
}else{
//沒有登陸過 在設置密碼
//判斷是設置密碼的第一次還是第二次
if (firt == null){
//第一次 保存第一次輸入的密碼
firt = inputPassword;
System.out.println("請確認密碼 ");
}else{
//第二次 比較兩次輸入的密碼是否相同
if (firt.equals(inputPassword)){
System.out.println("設置密碼成功");
//保存設置的密碼
FileOperation.instance.save(firt);
break;
}else{
System.out.println("兩次密碼不一致 請重新設置密碼:");
firt = null;
wrongTime--;
}
}
}
scanner.nextLine();
}
}
}
創建刪除文件
tring content = "Hello World";
// 第一種方法:根據文件路徑和文件名
String path = "F:\\test";
String filename = "test.txt";
File myFile = new File(path,filename);
// 第二種方法
String file = "F:\\test\\test.txt";
File myFile = new File(file);
if (!myFile.exists()) {
// 創建文件(前提是目錄已存在,若不在,需新建目錄即文件夾)
myFile.createNewFile();
// 刪除文件
myFile.delete();
}
寫入文件
// 第一種:字節流FileOutputStream
FileOutputStream fop = new FileOutputStream(myFile);
byte[] contentInBytes = content.getBytes();
fop.write(contentInBytes);
fop.flush();
fop.close();
// 第二種:FileWriter(參數true為追加內容,若無則是覆蓋內容)
FileWriter fw = new FileWriter(myFile,true);
fw.write(content);
fw.close();
// 第三種:BufferedWriter
BufferedWriter bw = new BufferedWriter(new FileWriter(myFile,true));
bw.write(content);
bw.flush();
bw.close();
// 第四種:打印流PrintStream和PrintWriter
// 字節打印流:PrintStream
// 字符打印流:PrintWriter
PrintWriter pw = new PrintWriter(new FileWriter(myFile,true));
pw.println(content); // 換行
pw.print(content); // 不換行
pw.close();
// 常用BufferedWriter和PrintWriter
讀取文件
FileInputStream
// 第一種:以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。
InputStream in = new FileInputStream(myFile);
// 一次讀一個字節
int tempbyte;
while ((tempbyte = in.read()) != -1) {
System.out.write(tempbyte);
}
in.close();
// 一次讀多個字節
int byteread = 0;
byte[] tempbytes = new byte[100];
ReadFromFile.showAvailableBytes(in);
while ((byteread = in.read(tempbytes)) != -1) {
S ystem.out.write(tempbytes, 0, byteread);
}
// System.out.write()方法是字符流,System.out.println()方法是字節流
InputStreamReader
// 第二種:以字符為單位讀取文件,常用于讀文本,數字等類型的文件
Reader reader = new InputStreamReader(new FileInputStream(myFile));
// 一次讀一個字節
int tempchar;
while ((tempchar = reader.read()) != -1) {
// 對于windows下,\r\n這兩個字符在一起時,表示一個換行。
// 但如果這兩個字符分開顯示時,會換兩次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否則,將會多出很多空行。
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
// 一次讀多個字節
char[] tempchars = new char[30];
int charread = 0;
// 讀入多個字符到字符數組中,charread為一次讀取字符數
while ((charread = reader.read(tempchars)) != -1) {
// 同樣屏蔽掉\r不顯示
if ((charread == tempchars.length) && (tempchars[tempchars.length - 1] != '\r')) {
System.out.print(tempchars);
} else {
for (int i = 0; i < charread; i++) {
if (tempchars[i] == '\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
}
BufferedReader
// 第三種:以行為單位讀取文件,常用于讀面向行的格式化文件
BufferedReader reader = new BufferedReader(new FileReader (myFile));
String tempString = null;
int line = 1;
// 一次讀入一行,直到讀入null為文件結束
while ((tempString = reader.readLine()) != null) {
// 顯示行號
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
// 常用BufferedReader
文件函數
//判斷文件是否存在
myFile.exists()
//讀取文件名稱
myFile.getName()
//讀取文件路徑(相對路徑)
myFile.getPath()
//讀取文件絕對路徑
myFile.getAbsolutePath()
//讀取文件的父級路徑
new File(myFile.getAbsolutePath()).getParent()
//讀取文件的大小
myFile.length()
//判斷文件是否被隱藏
myFile.isHidden()
//判斷文件是否可讀
myFile.canRead()
//判斷文件是否可寫
myFile.canWrite()
//判斷文件是否為文件夾
myFile.isDirectory()
這個練習相比而言比較簡單,答案我就不公布,希望大家不忘初心,每天跟著腳步走,有時候,在電腦前坐久了,腰酸背痛,在學習的同時不要忘記運動呀各位,身體是革命的本錢呀~~~~~
總結
以上是生活随笔為你收集整理的文件操作函数java_java中文件的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 800平办公楼要安装多少喷淋头?
- 下一篇: java 判断 年份,java怎么判断指