java文件讀寫,java文件讀寫異常

本文目錄一覽:

java文件讀寫

從你函數的簽名來看,推測你做的是文件複製操作。

這樣複製文件,在緩存分配和計算方面,都存在風險,你可能沒有正確計算這些值或者strbuffer

超出範圍。可以在讀寫源文件的同時寫入到新文件,例如:

private static void copyFileUsingFileStreams(File source, File dest)

throws IOException {

InputStream input = null;

OutputStream output = null;

try {

input = new FileInputStream(source);

output = new FileOutputStream(dest);

byte[] buf = new byte[1024];

int bytesRead;

while ((bytesRead = input.read(buf))  0) {

output.write(buf, 0, bytesRead);

}

} finally {

input.close();

output.close();

}

}

另外還有3種複製文件方法,可以參見:

4 Ways to Copy File in Java

JAVA的文件讀寫問題

當熱身了~import java.io.BufferedWriter;

import java.io.FileWriter;

import java.util.*;/*編寫一個程序,用於從鍵盤讀入信息,並存儲到磁盤文件中去。

要求:1. 以行的方式讀入姓名和學號信息,例如:張三 20071215 (姓名和學號中間用一個空格隔開)

2. 循環讀入,直到用戶輸入「quit」或者「QUIT」結束

3. 程序提示要用戶輸入一個文件名,例如:請輸入存儲到的文件名: userlist.txt

4. 在整個上述過程中,要做例外處理;如果文件創建成功,則給出提示信息。*/public class test9

{

public static void main(String[] args)

{

T1();

}

public static void T1()

{

FileWriter out ;

BufferedWriter bw;

String fileName = null;

String message = null;

Scanner scanner = new Scanner(System.in);

System.out.print(“請輸入存儲到的文件名:”);

fileName = scanner.next();

try

{

out = new FileWriter(fileName);

bw = new BufferedWriter(out);

System.out.print(“\n文件創建成功!\n請輸入姓名和學號信息:”);

while( !(message = scanner.next()).equalsIgnoreCase(“quit”))

{

bw.write(message);

bw.newLine();

}

bw.close();

out.close();

}

catch(Exception e)

{

System.out.println(“文件創建失敗!”);

}

}} import java.util.Scanner;

import java.io.*;/*再編寫一個程序,用於從上述存儲的磁盤文件中讀出信息,並顯示在屏幕上。

要求:

1)文件名從鍵盤輸入;

2)姓名和學號分開顯示,例如屏幕顯示如下信息:

文件 userlist.txt 中存儲的姓名有: 張三 李四王五 ……

文件userlist.txt 中存儲的學號有: 20061215 20061317 20061425 ….. */

public class test10

{

public static void main(String[] args)

{

T2();

}

public static void T2()

{

FileReader read;

BufferedReader in ;

Scanner scanner = new Scanner(System.in);

String fileName = null;

String message = null;

String[] buf = new String[2];

String[] name = new String[10];

String[] number = new String[10];

int pos1 = 0;

int pos2 = 0;

System.out.print(“請輸入要讀取的文件名:”);

fileName = scanner.next();

try

{

read = new FileReader(fileName);

in = new BufferedReader(read);

while((message = in.readLine()) != null)

{

buf = message.split(” “);

name[pos1++] = buf[0];

number[pos2++] = buf[1];

buf = new String[2];

}

}

catch(Exception e)

{

System.out.println(“該文件不存在!”);

}

System.out.println( “屏幕顯示如下信息:”);

System.out.print(“文件”+fileName+”中存儲的姓名有:”);

for(int i = 0; name[i] != null;i++)

{

System.out.print(name[i]+” “);

}

System.out.print(“\n文件”+fileName+”中存儲的學號有:”);

for(int i = 0; number[i] != null;i++)

{

System.out.print(number[i]+” “);

}

}}

java文件讀寫,在一個已經有內容的文件中,追加第一行,如何做到?

我的想法是可以用RandomAccessFile,這個類的seek方法,想在文件的哪個位置插入內容都行。所以你的第一行就不在話下了。但是,這個會覆蓋你文件中插入位置後面的內容。相當於我們在輸入的時候,按了鍵盤的insert鍵盤。所以,像你這種情況只能用臨時文件來存儲原有的內容,然後把要插入的數據寫入文件,再把臨時文件的內容追加到文件中。\x0d\x0avoid insert(String filename,int pos,String insertContent){//pos是插入的位置\x0d\x0a File tmp = File.createTempFile(“tmp”,null);\x0d\x0a tmp.deleteOnExit();\x0d\x0a try{\x0d\x0a RandomAccessFile raf = new RandomAccessFile(filename,”rw”);\x0d\x0a FileOutputStream tmpOut = new FileOutputStream(tmp);\x0d\x0a FileInputStream tmpIn = new FileInputStream(tmp);\x0d\x0a raf.seek(pos);//首先的話是0\x0d\x0a byte[] buf = new byte[64];\x0d\x0a int hasRead = 0;\x0d\x0a while((hasRead = raf.read(buf))0){\x0d\x0a //把原有內容讀入臨時文件\x0d\x0a tmpOut.write(buf,0,hasRead);\x0d\x0a \x0d\x0a }\x0d\x0a raf.seek(pos);\x0d\x0a raf.write(insertContent.getBytes());\x0d\x0a //追加臨時文件的內容\x0d\x0a while((hasRead = tmpIn.read(buf))0){\x0d\x0a raf.write(buf,0,hasRead);\x0d\x0a }\x0d\x0a }\x0d\x0a}

Java中對文件進行讀寫操作的基本類是什麼?

Java.io包中包括許多類提供許多有關文件的各個方面操作。

1 輸入輸出抽象基類InputStream/OutputStream ,實現文件內容操作的基本功能函數read()、 write()、close()、skip()等;一般都是創建出其派生類對象(完成指定的特殊功能)來實現文件讀寫。在文件讀寫的編程過程中主要應該注意異常處理的技術。

2 FileInputStream/FileOutputStream:

用於本地文件讀寫(二進制格式讀寫並且是順序讀寫,讀和寫要分別創建出不同的文件流對象);

本地文件讀寫編程的基本過程為:

① 生成文件流對象(對文件讀操作時應該為FileInputStream類,而文件寫應該為FileOutputStream類);

② 調用FileInputStream或FileOutputStream類中的功能函數如read()、write(int b)等)讀寫文件內容;

③ 關閉文件(close())。

3 PipedInputStream/PipedOutputStream:

用於管道輸入輸出(將一個程序或一個線程的輸出結果直接連接到另一個程序或一個線程的輸入端口,實現兩者數據直接傳送。操作時需要連結);

4管道的連接:

方法之一是通過構造函數直接將某一個程序的輸出作為另一個程序的輸入,在定義對象時指明目標管道對象

PipedInputStream pInput=new PipedInputStream();

PipedOutputStream pOutput= new PipedOutputStream(pInput);

方法之二是利用雙方類中的任一個成員函數 connect()相連接

PipedInputStream pInput=new PipedInputStream();

PipedOutputStream pOutput= new PipedOutputStream();

pinput.connect(pOutput);

5 管道的輸入與輸出:

輸出管道對象調用write()成員函數輸出數據(即向管道的輸入端發送數據);而輸入管道對象調用read()成員函數可以讀起數據(即從輸出管道中獲得數據)。這主要是藉助系統所提供的緩衝機制來實現的。

6隨機文件讀寫:

RandomAccessFile類(它直接繼承於Object類而非InputStream/OutputStream類),從而可以實現讀寫文件中任何位置中的數據(只需要改變文件的讀寫位置的指針)。

隨機文件讀寫編程的基本過程為:

① 生成流對象並且指明讀寫類型;

② 移動讀寫位置;

③ 讀寫文件內容;

④ 關閉文件。

七里河團隊答疑助人,希望我的回答對你有所幫助

Java文件讀寫

實用的模糊(通配符)文件查找程序

1 import java.io.File;

2 import java.util.regex.Matcher;

3 import java.util.regex.Pattern;

4 import java.util.ArrayList;

5

6 /** *//**

7 * pTitle: FileService /p

8* pDescription: 獲取文件 /p

9* pCopyright: Copyright (c) 2007/p

10* pCompany: /p

11* @author not attributable

12* @version 1.0

13*/

14public class FileService {

15 public FileService() {

16 }

17

18 /** *//**

19 * 在本文件夾下查找

20 * @param s String 文件名

21 * @return File[] 找到的文件

22 */

23 public static File[] getFiles(String s)

24 {

25 return getFiles(“./”,s);

26 }

27

28 /** *//**

29 * 獲取文件

30 * 可以根據正則表達式查找

31 * @param dir String 文件夾名稱

32 * @param s String 查找文件名,可帶*.?進行模糊查詢

33 * @return File[] 找到的文件

34 */

35 public static File[] getFiles(String dir,String s) {

36 //開始的文件夾

37 File file = new File(dir);

38

39 s = s.replace(‘.’, ‘#’);

40 s = s.replaceAll(“#”, “\\\\.”);

41 s = s.replace(‘*’, ‘#’);

42 s = s.replaceAll(“#”, “.*”);

43 s = s.replace(‘?’, ‘#’);

44 s = s.replaceAll(“#”, “.?”);

45 s = “^” + s + “$”;

46

47 System.out.println(s);

48 Pattern p = Pattern.compile(s);

49 ArrayList list = filePattern(file, p);

50

51 File[] rtn = new File[list.size()];

52 list.toArray(rtn);

53 return rtn;

54 }

55

56 /** *//**

57 * @param file File 起始文件夾

58 * @param p Pattern 匹配類型

59 * @return ArrayList 其文件夾下的文件夾

60 */

61

62 private static ArrayList filePattern(File file, Pattern p) {

63 if (file == null) {

64 return null;

65 }

66 else if (file.isFile()) {

67 Matcher fMatcher = p.matcher(file.getName());

68 if (fMatcher.matches()) {

69 ArrayList list = new ArrayList();

70 list.add(file);

71 return list;

72 }

73 }

74 else if (file.isDirectory()) {

75 File[] files = file.listFiles();

76 if (files != null files.length 0) {

77 ArrayList list = new ArrayList();

78 for (int i = 0; i files.length; i++) {

79 ArrayList rlist = filePattern(files[i], p);

80 if (rlist != null) {

81 list.addAll(rlist);

82 }

83 }

84 return list;

85 }

86 }

87 return null;

88 }

89

90 /** *//**

91 * 測試

92 * @param args String[]

93 */

94 public static void main(String[] args) {

95 }

96}

原創文章,作者:FITH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131825.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FITH的頭像FITH
上一篇 2024-10-03 23:48
下一篇 2024-10-03 23:48

相關推薦

發表回復

登錄後才能評論