Java文件读写

Java文件读写,第1张

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

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 * <p>Title: FileService </p>

8* <p>Description: 获取文件 </p>

9* <p>Copyright: Copyright (c) 2007</p>

10* <p>Company: </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 = 0i <files.lengthi++) {

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}

模拟:先创建一个TXT文件(内容来自控制台);然后读取文件并在控制台输出;最后实现对新创建的TXT文件(的数据进行排序后)的复制。分别对应三个函数,调用顺序需要注意:创建、读取、复制。

效果图如下:绿色部分为控制台输入的内容(当输入end时,结束)

代码如下:

package com.baidu

import java.io.BufferedReader

import java.io.File

import java.io.FileNotFoundException

import java.io.FileOutputStream

import java.io.FileReader

import java.io.IOException

import java.io.OutputStreamWriter

import java.util.Arrays

import java.util.Scanner

import java.util.Vector

public class CreateAndReadTxt {

// 文件名称

public static String fileName = ".txt"

public static String newFileName = ".txt"

// 文件路径

public final static String URL = System.getProperty("user.dir")

// CreateAndReadTxt.class.getResource("/").getPath()

// 创建TXT文件

public static void createTxtFile(String fName, String fileContent) {

// 创建文件

fileName = fName + fileName

File file = new File(fileName)

// 可以更改

file.setWritable(true)

// 判断当前路径下是否存在同名文件

boolean isExist = file.exists()

if (isExist) {

// 文件存在,删除

file.delete()

}

// 写入文件

try {

// 文件写入对象

FileOutputStream fos = new FileOutputStream(file)

// 输入流写入----默认字符为GBK

OutputStreamWriter osw = new OutputStreamWriter(fos)

// 写入

osw.write(fileContent)

// 写入完毕后关闭

osw.close()

System.out.println("成功创建文件:\t"+fileName)

} catch (IOException e) {

System.out.println("写入文件失败:\t" + e.getMessage())

}

}

// 阅读文件

public static void readFile(String fileName) {

System.out.println("开始读取文件:\t" + fileName)

// 产生文件对象

File file = new File(fileName)

//

try {

// 字符读取

FileReader fr = new FileReader(file)

// 缓冲处理

BufferedReader br = new BufferedReader(fr)

String str = ""

while ((str = br.readLine()) != null) {

System.out.println(str)

}

// 关闭

br.close()

fr.close()

} catch (FileNotFoundException e) {

System.out.println("读取文件失败:\t" + e.getMessage())

} catch (IOException e) {

System.out.println("读取文件失败:\t" + e.getMessage())

}

}

// 文件复制

public static void copyFile(String fromFileName,String toFileName){

//读取文件

File file = new File(fromFileName)

try {

FileReader fr = new FileReader(file)

BufferedReader br = new BufferedReader(fr)

// 定义接收变量

Vector<Double> vec = new Vector<Double>()

String s = ""

while(null!=(s=br.readLine())){

vec.add(Double.parseDouble(s))

}

br.close()

fr.close()

// 保存到数组并进行排序

Double dou[] = new Double[vec.size()]

vec.toArray(dou)

Arrays.sort(dou)

System.out.println("========复制文件=========")

// 写入新文件

newFileName = "副本"+newFileName

File newFile = new File(toFileName)

FileOutputStream fos = new FileOutputStream(newFile, true)

OutputStreamWriter osm = new OutputStreamWriter(fos)

for(Double d:dou){

osm.write(d.doubleValue()+"\n")

}

osm.close()

fos.close()

} catch (FileNotFoundException e) {

System.out.println("读取文件失败:\t" + e.getMessage())

} catch (IOException e) {

System.out.println("读取文件失败:\t" + e.getMessage())

}

}

public static void main(String[] args) {

/**

 * 构造数据

 */

Scanner scan = new Scanner(System.in)

StringBuilder sb = new StringBuilder()

String s = ""

while(!("end".equals(s = scan.next()))){// 当输入end时,结束

sb.append(s)

sb.append("\n")

}

scan.close()

/**

 * 使用数据

 */

CreateAndReadTxt.createTxtFile("creat", sb.toString())

CreateAndReadTxt.readFile(fileName)

System.out.println(fileName)

CreateAndReadTxt.copyFile(fileName, newFileName)

CreateAndReadTxt.readFile(newFileName)

}

}

在网上查了很多关于修改文件的方法,不得其要领。自己想了两个取巧的办法,来解决对文件的修改。一:读取一个文件file1(FileReader and BufferedReader),进行 *** 作后写入file2(FileWriter and BufferedWriter),然后删除file1,更改file2文件名为file1(Rename()方法)。二:创建字符缓冲流(StringBuffer),读取文件内容赋给字符缓冲流,再将字符缓冲流中的内容写入到读取的文件中。例如: test.txt 这里是放在d盘的根目录下,内容如下 able adj 有才干的,能干的 active adj 主动的,活跃的 adaptable adj 适应性强的 adroit adj 灵巧的,机敏的 运行结果生成在同目录的 test1.txt中 able #adj*有才干的,能干的 active #adj*主动的,活跃的 adaptable #adj*适应性强的 adroit #adj*灵巧的,机敏的 代码: public class Test { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"))StringBuffer sb = new StringBuffer()String lineContent = null while( (lineContent = br.readLine()) != null){ String[] sp = lineContent.split(" ")sp[0] = sp[0].concat(" *")sp[1] = sp[1].concat("# ")for(int i=0i sb.append(sp[i])}sb.append("\r\n")}FileWriter fw = new FileWriter("D:\\test2.txt")fw.write(sb.toString())br.close()fw.close()}}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8108573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存