java操作文件
java是跨平台語言,在linux上讀文件跟在windows上讀文件是一樣的 只是文件路徑不一樣,可以用File對象和FileInputSteam來讀取。但要注意文件編碼問題。x0dx0a如果有中文請做適當的編碼轉換,通常情況下Linux的默認字元編碼為UTF-8編碼方式,項目可以直接採用utf8編碼方式操作.用System.getProperty("file.encoding")可檢查系統編碼格式。可改操作系統的文件系統編碼,vi /etc/profile,在文件末尾加上x0dx0aexport LANG="zh_CN.GBK"x0dx0aexport LC_ALL="zh_CN.GBK"x0dx0a編碼轉換代碼:new String(files[i].getName().getBytes("GBK"),"UTF-8");x0dx0ax0dx0a文件操作的核心代碼請參考下面代碼:x0dx0ax0dx0aString path= "/home/";x0dx0apath= "/home/multiverse/Repository/PMEPGImport";x0dx0aFile file=new File(path);x0dx0aFile[] tempList = file.listFiles();x0dx0afor (int i = 0; i < tempList.length; i++) {x0dx0a if (tempList[i].isFile()) {x0dx0a//FileInputStream fis = new FileInputStream("fileName");x0dx0ax0dx0a//InputStreamReader isr = new InputStreamReader(fis,"utf-8");x0dx0aStringBuffer buffer = new StringBuffer();x0dx0aString text;x0dx0ax0dx0aBufferedReader input = new BufferedReader (new FileReader(tempList[i]));x0dx0ax0dx0awhile((text = input.readLine()) != null)x0dx0a buffer.append(text +"/n"); }x0dx0ax0dx0aif (tempList[i].isDirectory()) {x0dx0a System.out.println("文件夾:"+tempList[i]);x0dx0a }x0dx0a }
2. java中,文件輸入操作由下面哪個
Java 操作文件包括了兩個層面:
在文件系統的層面上來操作文件,包括創建文件、刪除文件、創建目錄、拷貝文件等等。
操作文件里保存的數據,包括讀文件、寫文件。
1. 在文件系統層面操作文件
1.1 File 類介紹
Java 中通過 java.io.File 類來對一個文件(包括目錄)進行抽象的描述。不過有 File 對象,並不代表對應的文件真實存在。
1.2 File 常見屬性
屬性 修飾符及類型 說明
pathSeparator static String 依賴於系統的路徑分隔符,String 類型的表示
pathSeparator static char 依賴於系統的路徑分隔符,char 類型的表示
1.3 File 構造方法
構造方法 說明
File(File parent, String child) 根據父目錄+孩子文件路徑,創建一個新的 File 實例
File(String pathname) 根據文件路徑創建一個新的 File 實例,路徑可以是絕對路徑或者相對路徑
File(String parent, String child) 根據父目錄路徑+孩子文件路徑,創建一個新的 File 實例
1.4 File 常用方法
方法 返回值類型 說明 注意
getParent() String 返回 File 對象的父目錄文件路徑
getName() String 返回 File 對象的純文件名稱
getPath() String 返回 File 對象的文件路徑
getAbsolutePath() String 返回 File 對象的絕對路徑
getCanonicalPath() String 返回 File 對象的修飾過的絕對路徑 如果絕對路徑的值為:d:/././test.txt,那麼修飾過的絕對路徑就為:d:/test.txt。
exists() boolean 判斷 File 對象描述的文件是否真實存在
isDirectory() boolean 判斷 File 對象代表的文件是否是一個目錄
isFile() boolean 判斷 File 對象代表的文件是否是一個普通文件
createNewFile() boolean 根據 File 對象,自動創建一個空文件。成功創建後返回 true 如果文件路徑不正確或者沒有許可權,則可能創建失敗。
delete() boolean 根據 File 對象,刪除該文件。成功刪除後返回 true 如果文件路徑不正確或者沒有許可權,則可能刪除失敗。
deleteOnExit() void 根據 File 對象,標注文件將被刪除,刪除動作會到 JVM 運行結束時才會進行
list() String[] 返回 File 對象代表的目錄下的所有文件名
listFiles() File[] 返回 File 對象代表的目錄下的所有文件,以 File 對象表示
mkdir() boolean 創建 File 對象代表的目錄
mkdirs() boolean 創建 File 對象代表的目錄,如果必要,會創建中間目錄
renameTo(File dext) boolean 重命名文件或移動文件,當目錄為空時也可以重命名目錄
canRead() boolean 判斷用戶是否對文件有可讀許可權
canWrite() boolean 判斷用戶是否對文件有可寫許可權
2. 操作文件里的數據
文件內容的操作包括讀文件和寫文件,而對於這兩種操作 Java 又提供了兩種不同的類:
讀類 寫類 說明
InputStream OutputStream 位元組流,針對二進制文件進行讀寫,操作基本單位是位元組
Reader Writer 字元流,針對文本文件進行讀寫,操作基本單位是字元
位元組流: 它處理單元為1個位元組,操作位元組和位元組數組,存儲的是二進制文件,如果是音頻文件、圖片、歌曲,就用位元組流。
字元流: 它處理的單元為2個位元組的 Unicode 字元,分別操作字元、字元數組或字元串,字元流是由 Java 虛擬機將位元組轉化為2個位元組的 Unicode 字元為單位的字元而成的,如果是關繫到中文(文本)的,用字元流更好。
所有文件都是以位元組的形式儲存,在磁碟上保留的並不是文件的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取文件(特別是文本文件)時,也是一個位元組一個位元組地讀取以形成位元組序列。
位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串。
位元組流提供了處理任何類型的 IO 操作的功能,但它不能直接處理 Unicode 字元,而字元流就可以。
位元組流在操作的時候本身不會用到緩沖區的,是與文件本身直接操作的;而字元流在操作的時候會使用到緩沖區的。
其中 InputStream/OutputStream 和 Reader/Writer 都實現了 Closeable 介面,所以可以不主動通過 close 方法去關閉該資源,而是通過代碼可讀性更高的 try-with-resource 操作在 try 中的內容結束後,無論是否有異常都關閉該資源。
使用 OutputStream 或 writer 打開文件默認會清空之前的文件內容
2.1 操作位元組流數據
2.1.1 InputStream
InputStream 是一個抽象類,使用時需要使用具體的實現類。InputStream 的實現類很多,針對不同的輸入設備都可以對應一個實現類,其中針對文件讀取的實現類是 FileInputStream。
FileInputStream 構造方法:
構造方法 說明
FileInputStream(File file) 利用 File 構造對應文件輸入流
FileInputStream(String name) 利用文件路徑構造對應文件輸入流
InputStream 核心方法:
方法 返回值類型 說明
read() int 一次讀取一個位元組的數據,如果返回 -1 表示文件讀完了
read(byte[] b) int 一次最多讀取 b.length 位元組的數據到 b 中,返回值為實際讀到的位元組數量,如果返回 -1 表示文件讀完了
read(byte[] b, int off, int len) int 一次最多讀取 len 個位元組到 b 中,並從 off 的位置開始存放,返回值為實際讀到的位元組數量,如果返回 -1 表示文件讀完了
close() void 關閉位元組流
為什麼 read 方法的返回值是 Int 類型?
對於 read 方法的返回值,當讀取的是數字和英文時,返回值是對應的 ascii 碼;當讀取的是漢字時,返回的是漢字的機內碼,比如使用的是 GBK 編碼方式,返回的就是 GBK 的內部編碼。read 方法每次從 inputstream 中讀取一個位元組,而一個位元組是8位,但當最高位是1的時候,二進制對應的 ascii 碼值就是復數,而 ascii 是沒有負數的,所以用 byte 類型表示不了。並且 11111111 對應的十進制值是 -1,而返回 -1 表示文件讀取完畢了,則後面的數據就不會讀了,因此 byte 類型不適合,int 類型則可以解決這個問題。
示例代碼: 使用 read() 方法讀取文件內容
public class Demo1 {
public static void main(String[] args) throws IOException {
File file = new File("./test.txt");
StringBuilder sb = new StringBuilder();
try (InputStream inputStream = new FileInputStream(file)){
while(true) {
int b = inputStream.read();
if(b == -1){
break;
}
sb.append((char) b);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
登錄後復制
示例代碼: 使用 read(byte[] b) 方法讀取文件內容
public class Demo1 {
public static void main(String[] args) throws IOException {
File file = new File("./test.txt");
byte[] buffer = new byte[1024];
try (InputStream inputStream = new FileInputStream(file)){
while(true) {
int len = inputStream.read(buffer);
if(len == -1){
break;
}
String s = new String(buffer, 0, len, "utf-8");
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登錄後復制
2.1.2 OutputStream
OutputStream 是一個抽象類,使用時需要使用具體的實現類。OutputStream 的實現類很多,針對不同的輸出設備都可以對應一個實現類,其中針對文件讀取的實現類是 FileOutputStream。
FileOutputStream 構造方法:
構造方法 說明
FileOutputStream(File file) 利用 File 構造對應文件輸出流
FileOutputStream(String name) 利用文件路徑構造對應文件輸出流
FileOutputStream(File file, boolean append) append 表示是否追加數據到文件的末尾,為 true 表示追加,為 false 表示情空之前的內容重新加入
FileOutputStream(String name, boolean append) append 表示是否追加數據到文件的末尾,為 true 表示追加,為 false 表示情空之前的內容重新加入
OutputStream 核心方法:
方法 返回值類型 說明
write() int 一次寫入一個位元組的數據
write(byte[] b) int 一次最多寫入 b.length 位元組的數據到 b 中,返回值為實際寫入的位元組數量
write(byte[] b, int off, int len) int 一次最多寫入 len 個位元組到 b 中,並從 off 的位置開始存放,返回值為實際寫入到的位元組數量
close() void 關閉位元組流
示例代碼:
public class Demo1{
public static void main(String[] args) throws IOException {
File in = new File("./in.txt");
File out = new File("./out.txt");
byte[] buffer = new byte[1024];
try (InputStream inputStream = new FileInputStream(in);
OutputStream outputStream = new FileOutputStream(out)) {
while (true) {
int len = inputStream.read(buffer);
if (len == -1) {
break;
}
outputStream.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登錄後復制
2.1.3 BufferedInputStream
BufferedInputStream 也是 InputStream 的具體實現類,相比於 FileInputStream 優化了系統調用,即通俗解釋為:將數據保存了緩存區,但是減少磁碟 IO 並不是 BufferedInputStream 來做的,而是 OS 來做的。OS 根據局部性原理,會預讀部分的數據到內存緩存區,這樣下次 IO 如果讀取數據在緩存命中了,就不需要等待磁碟的定址,而是直接返回數據,效率就會快很多。
2.1.4 BufferedOutputStream
BufferedOutPutStream 也是 OutputStream 的具體實現類,相比於 FileOutputStream 優化了系統調優,即每次寫數據的時候,都會將數據放入緩存區中,等緩存區滿了之後,才會一次性寫入到磁碟中,大大提高了效率。
2.2 操作字元流數據
2.2.1 Reader
Reader 是實現字元輸入流的一種類型,其本身屬於一個抽象類,使用時需要使用具體的實現類。Reader 的實現類很多,針對不同的輸入設備都可以對應一個實現類,其中針對文件讀取的實現類是 FileReader。Reader 的使用方式和 InputStream 相仿。
示例代碼:
public class Demo2 {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("./test.txt");
StringBuilder sb = new StringBuilder();
try (Reader reader = new FileReader(file)) {
while (true) {
int read = reader.read();
if (read == -1) {
break;
}
sb.append((char) read);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
登錄後復制
2.2.2 Writer
Writer 是實現字元輸出流的一種類型,其本身屬於一個抽象類,使用時需要使用具體的實現類。Writer 的實現類很多,針對不同的輸出設備都可以對應一個實現類,其中針對文件讀取的實現類是 FileWriter。Writer 的使用方式和 OutputStream 相仿。
FileWriter 構造方法:
構造方法 說明
FileWriter(File file) 利用 File 構造對應文件輸出流
FileWriter(String name) 利用文件路徑構造對應文件輸出流
FileWriter(File file, boolean append) append 表示是否追加數據到文件的末尾,為 true 表示追加,為 false 表示情空之前的內容重新加入
FileWriter(String name, boolean append) append 表示是否追加數據到文件的末尾,為 true 表示追加,為 false 表示情空之前的內容重新加入
示例代碼:
public class Demo2 {
public static void main(String[] args) throws FileNotFoundException {
File in = new File("./in.txt");
File out = new File("./out.txt");
try (Reader reader = new FileReader(in);
Writer writer = new FileWriter(out)) {
while (true) {
int read = reader.read();
if (read == -1) {
break;
}
writer.write(read);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登錄後復制
2.2.3 BufferedReader
BufferedReader 也是 Reader 的具體實現類,相比於 Reader 優化了系統調用,即通俗解釋為:將數據保存了緩存區,但是減少磁碟 IO 並不是 BufferedReader 來做的,而是 OS 來做的。OS 根據局部性原理,會預讀部分的數據到內存緩存區,這樣下次 IO 如果讀取數據在緩存命中了,就不需要等待磁碟的定址,而是直接返回數據,效率就會快很多。
2.2.4 BufferedWriter
BufferedWriter 也是 Writer 的具體實現類,相比於 Writer 優化了系統調優,即每次寫數據的時候,都會將數據放入緩存區中,等緩存區滿了之後,才會一次性寫入到磁碟中,大大提高了效率。
2.3 Scanner 和 PrintWriter
Java 標准庫中提供的 Scanner 和 PrintWriter 類能夠像文件中讀取文本數據和寫入文本數據。
2.3.1 Scanner
java.util.Scanner 類常用來從控制台中讀取字元串和基本類型的數值。Scanner 可以將輸入的值以空白字元分割標記。
Scanner 的構造方法:
構造方法 說明
Scanner(Readable source) 創建一個 Scanner,從指定的可讀資源中掃描標記,包括文件、文件路徑、字元串等。
Scanner(InputStream source) 創建一個 Scanner,從指定的位元組輸入流中掃把標記。
Scanner 常用方法:
方法 返回值類型 說明
hasNext() boolean 如果 Scanner 還要更多的數據可讀取,則返回 true
next() String 從 Scanner 中讀取下一個標記作為字元串返回
nextLine() String 從 Scanner 中讀取一行,以換行符結束
close() void 關閉 Scanner
System.in 為系統自帶的標准輸入流,該流是一直打開並准備提供輸入數據。通常,這個流對應於鍵盤輸入或由主機環境或用戶指定的另一個輸入源。
使用 Scanner 沒有必要關閉輸入文件,但是關閉能夠釋放文件佔有的資源。
示例代碼:
public class Demo3 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("./test.txt"))) {
while (scanner.hasNext()) {
String s = scanner.next();
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登錄後復制
2.3.2 PrintWriter
java.io.PrintWriter 類可用來創建一個文件並向文本文件中寫入數據。通常使用 System.out.println 向控制台輸入文本。
PrintWriter 構造方法:
構造方法 說明
PrintWriter(Writer out) 為指定的字元輸入流創建一個 PrintWriter。
PrintWriter(Writer out, boolean autoFlush) 為指定的字元輸入流創建一個 PrintWriter,如果 autoFlush 為 true,則 println、printf 或 format 方法將刷新輸出緩沖區。
PrintWriter(OutputStream out) 為指定的位元組輸入流創建一個 PrintWriter。
PrintWriter(OutputStream out, boolean autoFlush) 為指定的位元組輸入流創建一個 PrintWriter,如果 autoFlush 為 true,則 println、printf 或 format 方法將刷新輸出緩沖區。
PrintWriter(String fileName) 為指定的文件路徑創建一個 PrintWriter
PrintWriter(String fileName, String csn) 為指定的文件路徑創建一個 PrintWriter,並且通過指定的字元集對字元進行編碼。
PrintWriter(File file) 為指定的文件對象創建一個 PrintWriter。
PrintWriter(File file, String scn) 為指定的文件對象創建一個 PrintWriter,並且通過指定的字元集對字元進行編碼。
PrintWriter 常用方法:
方法 返回值類型 說明
print(String s) void 將字元串寫入文件中
println(String s) void 將字元串寫入文件中,多列印一個換行
printf(String s) void 將字元串寫入文件中,按照指定格式寫文件中
System.out 為系統自帶的 printStream,表示控制台的標准 Java 對象,通過它能夠向控制台輸入數據。
使用 PrintWriter 必須使用 close 方法關閉文件,或者使用 try-with-resources 自動關閉資源,狗則數據就不能正確地保存在文件中。
示例代碼:
3. JAVA文件操作問題
文件沒有找到?
貌似你的路徑寫的有問題么
說實話 你這段代碼我沒看完
你能不能把異常棧貼上來給我們看看
就能很明顯的找到是哪行報的錯...
朋友 我建議你用
System.out.println(fm);
把這個東西列印出來看看是什麼值
你對一個List類型的對象用toString()方法
得到的結果的形式應該是
[***,***,...]
4. java的幾種IO流讀取文件方式
一、超類:
位元組流: InputStream(讀入流) OutputStream(寫出流)
字元流: Reader(字元 讀入流) Writer (字元寫出流)
二、文件操作流
位元組流: FileInputStream ,FileOutputStream
字元流: FileReader, FileWriter(用法與位元組流基本相同,不寫)
//1.指定要讀 的文件目錄及名稱
File file =new File("文件路徑");
//2.創建文件讀入流對象
FileInputStream fis =new FileInputStream(file);
//3.定義結束標志,可用位元組數組讀取
int i =0 ;
while((i = fis.read())!=-1){
//i 就是從文件中讀取的位元組,讀完後返回-1
}
//4.關閉流
fis.close();
//5.處理異常
//1.指定要寫到的文件目錄及名稱
File file =new File("文件路徑");
//2.創建文件讀入流對象
FileOutputStream fos =new FileOutputStream(file);
//3.定義結束標志
fos.write(要寫出的位元組或者位元組數組);
//4.刷新和關閉流
fos.flush();
fos.close();
//5.處理異常
三、緩沖流:
位元組緩沖流: BufferedInputStream,BufferedOutputStream
字元緩沖流:BufferedReader ,BufferedWriter
緩沖流是對流的操作的功能的加強,提高了數據的讀寫效率。既然緩沖流是對流的功能和讀寫效率的加強和提高,所以在創建緩沖流的對象時應該要傳入要加強的流對象。
//1.指定要讀 的文件目錄及名稱
File file =new File("文件路徑");
//2.創建文件讀入流對象
FileInputStream fis =new FileInputStream(file);
//3.創建緩沖流對象加強fis功能
BufferedInputStream bis =new BufferedInputStream(fis);
//4.定義結束標志,可用位元組數組讀取
int i =0 ;
while((i = bis.read())!=-1){
//i 就是從文件中讀取的位元組,讀完後返回-1
}
//5.關閉流
bis.close();
//6.處理異常
//1.指定要寫到的文件目錄及名稱
File file =new File("文件路徑");
//2.創建文件讀入流對象
FileOutputStream fos =new FileOutputStream(file);
//3.創建緩沖流對象加強fos功能
BufferedOutputStream bos=new BufferedOutputStream(fos);
//4.向流中寫入數據
bos.write(要寫出的位元組或者位元組數組);
//5.刷新和關閉流
bos.flush();
bos.close();
//6.處理異常
四、對象流
ObjectInputStream ,ObjectOutputStream
不同於以上兩種類型的流這里只能用位元組對對象進行操作原因可以看上篇的編碼表比照原理
ObjectOutputStream對象的序列化:
將java程序中的對象寫到本地磁碟里用ObjectOutputStream
eg:將Person類的對象序列化到磁碟
創建Person類
注1:此類要實現Serializable介面,此介面為標志性介面
注2:此類要有無參的構造函數
注3:一旦序列化此類不能再修改
class Person implements Serializable{
public Person(){}
}
2.創建對象流對象
註:要增強功能可以將傳入文件緩沖流
ObjectOutputStream oos =new ObjectOutputStream(
new FileOutputStream(new File("文件路徑")));
3.寫入對象 ,一般會將對象用集合存儲起來然後直接將集合寫入文件
List<Person> list =new ArrayList<>();
list.add(new Person());
...(可以添加多個)
oos.writeObject(list);
4.關閉流,處理異常
oos.flush();
oos.close();
五、轉換流:
這類流是用於將字元轉換為位元組輸入輸出,用於操作字元文件,屬於字元流的子類,所以後綴為reader,writer;前綴inputstream,outputstream;
注 :要傳入位元組流作為參賽
InputStreamReader: 字元轉換輸出流
OutputStreamWriter:字元轉換輸入流
//1.獲取鍵盤輸入的位元組流對象
inInputStream in =Stream.in;
/*2.用轉換流將位元組流對象轉換為字元流對象,方便調用字元緩沖流的readeLine()方法*/
InputStreamReader isr =new InputStreamReader(in);
/*5.創建字元轉換輸出流對象osw,方便把輸入的字元流轉換為位元組輸出到本地文件。*/
OutputStreamWriter osw =new OutputStreamWriter(new
FileOutputStream(new File("文件名")));
/*3.現在isr是字元流,可以作為參數傳入字元緩沖流中*/
BufferedReader br =new BufferedReader(isr);
/*4.可以調用字元緩沖流br的readLine()方法度一行輸入文本*/
String line =null;
while((line =br.readLine()){
osw.write(line);//osw是字元流對象,可以直接操作字元串
}
註:InputStreamReader isr =new InputStreamReader(new "各種類型的位元組輸入流都行即是:後綴為InputStream就行");
OutputStreamWriter osw =new OutputStreamWriter(new
"後綴為OutputStream就行");
六、區別記憶
1.對象流是可以讀寫幾乎所有類型的只要是對象就行,而位元組字元流,只能讀寫單個位元組字元或者位元組字元數組,以上沒有讀寫位元組字元數組的;注意對象流只有位元組流!
2.字元和位元組循環讀入的結束條件int i=0; (i =fis.read())!=-1
用字元數組復制文件(fr 讀入流 ,fw寫出流),位元組流也是相同的用法
int i = 0; char[] c = new char[1024];
while((i = fr.reade()) !=-1)){
fw.write(c,0,i);
}
123456
3.對象流裡面套緩沖流的情景:
new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(「文件路徑」))));
4.記憶流及其功能的方法:
前綴表示功能,後綴表示流的類型;
比如說FileInputStream 前綴:File,表示操作的磁碟,後綴:intputstream,表示是位元組輸入流。
同理 FileReader:表示操作文件的字元流
ObjectInputStream :操作對象的位元組輸入流
5.拓展:獲取鍵盤輸入的字元的緩沖流的寫法:
new BufferedReader(new InputStreamReader(System.in)));
將位元組以字元形式輸出到控制台的字元緩沖流的寫法:
new BufferedWriter( new OutputStreamWriter(System.out))
5. 【高額獎賞】用java實現文件操作。
1、執行代碼如下,因不支持插入代碼故放圖片
6. java 文件夾操作
你好,按照你的要求代碼編寫如下,可以直接運行
import java.io.File;
public class test {
public static void main(String[] args) {
File root = new File("d:\\");
for (File file : root.listFiles()) {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
String fileName = f.getName();
if (fileName.endsWith(".png")) {
System.out.println(file.getName());
break;
}
}
}
}
}
}
7. java 根據一個文件內容同時操作多個文件
可以用多線程來操作,java8的非同步多線程CompletionStage介面,就可以實現,或者不使用多線程使用單線程版反應器模式Reactor(反應器)定製幾個處理器介面,根據第一個文件的內容來分發到不同的處理器來處理你具體的需求,具體代碼有空可以寫給你
8. Java讀寫文件的幾種方法
java讀取配置文件的幾種方法如下:
方式一:採用ServletContext讀取,讀取配置文件的realpath,然後通過文件流讀取出來。因為是用ServletContext讀取文件路徑,所以配置文件可以放入在web-info的classes目錄中,也可以在應用層級及web-info的目錄中。文件存放位置具體在eclipse工程中的表現是:可以放在src下面,也可放在web-info及webroot下面等。因為是讀取出路徑後,用文件流進行讀取的,所以可以讀取任意的配置文件包括xml和properties。缺點:不能在servlet外面應用讀取配置信息。
方式二:採用ResourceBundle類讀取配置信息,
優點是:可以以完全限定類名的方式載入資源後,直接的讀取出來,且可以在非Web應用中讀取資源文件。缺點:只能載入類classes下面的資源文件且只能讀取.properties文件。
9. Java怎麼使用表格輸入數據並保存為文件
在 Java 中使用表格輸入數據並保存為文件,可以使用 Swing 包中的 JTable 組件和 I/O 類庫中的文件操作方法。
首先,你需要創建一個 JTable 對象,並在表格中輸入數據。例如:
String[] columnNames = {"Name", "Age", "Gender"};Object[][] data = {{"Alice", 20, "Female"}, {"Bob", 25, "Male"}};JTable table = new JTable(data, columnNames);
然後,你需要使用 I/O 類庫中的文件操作方法,將表格中的數據保存到文件中。例如,你可以使用 FileWriter 類來寫入文件:
FileWriter writer = new FileWriter("table.txt");for (int i = 0; i < table.getRowCount(); i++) { for (int j = 0; j < table.getColumnCount(); j++) {
writer.write(table.getValueAt(i, j).toString());
writer.write("\t");
}
writer.write("\n");
}
writer.close();
上面的代碼會將表格中的數據寫入文件 "table.txt" 中,每行數據之間用製表符隔開,每列數據之間用換行符隔開。
注意,在使用文件操作方法時,你需要處理文件讀寫可能出現的異常。你可以使用 try-catch 語句將文件操作代碼包裝起來,以便在發生異常時能夠正確處理。
這是一個簡單的例子,你可以根據自己的需求來調整代碼。例如,你可以使用其他的 I/O 類,比如 BufferedWriter 或 PrintWriter 等,來更方便地寫入文件。你還可以使用其他的文件格式,比如 CSV、Excel 等,來保存數據。
10. java如何讀取txt文件
讀取txt文件(一整個獲取)