1. 运用缓冲流完成文件复制
package com. briup. day21 ;
import java. io. BufferedInputStream ;
import java. io. BufferedOutputStream ;
import java. io. FileInputStream ;
import java. io. FileOutputStream ;
public class Method1 {
public static void main ( String [ ] args) throws Exception {
FileInputStream fis = new FileInputStream ( "src/com/briup/day21/a.txt" ) ;
BufferedInputStream bis = new BufferedInputStream ( fis) ;
BufferedOutputStream bos = new BufferedOutputStream ( new
FileOutputStream ( "src/com/briup/day21/b.txt" ) ) ;
int len = - 1 ;
while ( ( len = bis. read ( ) ) != - 1 ) {
bos. write ( len) ;
bos. flush ( ) ;
}
fis. close ( ) ;
bis. close ( ) ;
bos. close ( ) ;
}
}
package com. briup. day21 ;
import java. io. BufferedReader ;
import java. io. FileReader ;
import java. io. IOException ;
import java. io. PrintStream ;
public class TestBuffered {
public static void main ( String [ ] args) throws IOException {
BufferedReader br = new BufferedReader ( new FileReader ( "src/com/briup/day21/a.txt" ) ) ;
PrintStream ps = new PrintStream ( "src/com/briup/day21/b.txt" ) ;
String data= null ;
while ( ( data= br. readLine ( ) ) != null ) {
ps. println ( data) ;
}
br. close ( ) ;
ps. close ( ) ;
}
}
2. 写PropertiesFile类
在message文件中存放prop_name=prop_value格式的属性,每行存放一个属性,输入一个属性名,找出其对应的属性值并输出。
package com. briup. day21 ;
import java. io. BufferedReader ;
import java. io. FileReader ;
import java. util. Scanner ;
public class Method2 {
public static void main ( String [ ] args) throws Exception {
FileReader fr = new FileReader ( "src/com/briup/day21/message.properties" ) ;
BufferedReader br = new BufferedReader ( fr) ;
String len = null ;
System . out. println ( "请输入你想查找的key值:" ) ;
String name = new Scanner ( System . in) . nextLine ( ) ;
while ( ( len = br. readLine ( ) ) != null ) {
String [ ] split = len. split ( "[=]" ) ;
if ( name. equals ( split[ 0 ] ) ) {
System . out. println ( name + "对应的value是:" + split[ 1 ] ) ;
}
}
}
}
package com. briup. day21 ;
import java. io. BufferedReader ;
import java. io. FileReader ;
import java. io. IOException ;
import java. io. PrintStream ;
import java. util. HashMap ;
import java. util. Map ;
import java. util. Set ;
public class PropertiesFile {
public static void main ( String [ ] args) throws IOException {
BufferedReader br= new BufferedReader ( new FileReader ( "src/com/briup/day21/message.txt" ) ) ;
PrintStream ps= new PrintStream ( "src/com/briup/day21/properties.txt" ) ;
Map < Integer , String > map= new HashMap < Integer , String > ( ) ;
int key= 1 ;
String len= null ;
while ( ( len= br. readLine ( ) ) != null ) {
map. put ( key, len) ;
key++ ;
}
Set < Map. Entry < Integer , String > > entrySet= map. entrySet ( ) ;
for ( Map. Entry < Integer , String > entry : entrySet) {
ps. println ( "prop_name:" + entry. getKey ( ) + "," + "prop_value:" + entry. getValue ( ) ) ;
}
br. close ( ) ;
ps. close ( ) ;
}
}
3. 编程实现:创建Teacher类,属性包含id,name,salary,从控制台输入教师基本信息,数据之间通过“ - ”分割(每一行,为一个老师的信息),当输入exit时结束,从控制台获取教师信息后创建教师对象,将集合写到文件中,再从文件中读取集合进行遍历输出。
package com. briup. day21 ;
import java. io. FileInputStream ;
import java. io. FileOutputStream ;
import java. io. ObjectInputStream ;
import java. io. ObjectOutputStream ;
import java. io. Serializable ;
import java. util. ArrayList ;
import java. util. List ;
import java. util. Scanner ;
public class TestTeacher {
public static void main ( String [ ] args) throws Exception {
List < Teacher > list = new ArrayList < Teacher > ( ) ;
System . out. println ( "输入exit的时候结束输入" ) ;
System . out. println ( "请按照id-name-salary的形式输入:" ) ;
while ( true ) {
String str = new Scanner ( System . in) . nextLine ( ) ;
if ( "exit" . equals ( str) ) {
break ;
} else {
String [ ] split = str. split ( "[-]" ) ;
list. add ( new Teacher ( Integer . valueOf ( split[ 0 ] ) , split[ 1 ] , Integer . valueOf ( split[ 2 ] ) ) ) ;
}
}
FileOutputStream fos = new FileOutputStream ( "src/com/briup/day21/teacher.txt" ) ;
ObjectOutputStream oos = new ObjectOutputStream ( fos) ;
oos. writeObject ( list) ;
oos. flush ( ) ;
FileInputStream fis = new FileInputStream ( "src/com/briup/day21/teacher.txt" ) ;
ObjectInputStream ois = new ObjectInputStream ( fis) ;
List < Teacher > list1 = ( List < Teacher > ) ois. readObject ( ) ;
for ( Teacher t : list1) {
System . out. println ( t) ;
}
fos. close ( ) ;
oos. close ( ) ;
fis. close ( ) ;
ois. close ( ) ;
}
}
class Teacher implements Serializable {
int id;
String name;
int salary;
public Teacher ( ) {
super ( ) ;
}
public Teacher ( int id, String name, int salary) {
super ( ) ;
this . id = id;
this . name = name;
this . salary = salary;
}
@Override
public String toString ( ) {
return "Teacher [id=" + id + ", name=" + name + ", salary=" + salary + "]" ;
}
public int getId ( ) {
return id;
}
public void setId ( int id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getSalary ( ) {
return salary;
}
public void setSalary ( int salary) {
this . salary = salary;
}
private static final long serialVersionUID = 1L ;
}
4.文件a中的内容为:java version "* **"Java™ SE Runtime Environment (build 1.8.0_301-b09)Java HotSpot™ 64-Bit Server VM (build 25.301-b09, mixed mode)新内容为:1.8.0_301
package com. briup. day21 ;
import java. io. BufferedReader ;
import java. io. BufferedWriter ;
import java. io. FileInputStream ;
import java. io. FileOutputStream ;
import java. io. InputStreamReader ;
import java. io. OutputStreamWriter ;
public class Method3 {
public static void main ( String [ ] args) throws Exception {
FileInputStream fis = new FileInputStream ( "src/com/briup/day21/aa.txt" ) ;
InputStreamReader isr = new InputStreamReader ( fis, "UTF-8" ) ;
BufferedReader br = new BufferedReader ( isr) ;
FileOutputStream fos = new FileOutputStream ( "src/com/briup/day21/bb.txt" ) ;
OutputStreamWriter osw = new OutputStreamWriter ( fos, "UTF-8" ) ;
BufferedWriter bw = new BufferedWriter ( osw) ;
String str = "1.8.0_301" ;
String len = null ;
while ( ( len = br. readLine ( ) ) != null ) {
if ( len. equals ( "***** ******" ) ) {
bw. write ( str) ;
} else {
bw. write ( len + "\n" ) ;
}
}
bw. flush ( ) ;
fis. close ( ) ;
isr. close ( ) ;
br. close ( ) ;
fos. close ( ) ;
osw. close ( ) ;
bw. close ( ) ;
}
}
package com. briup. day20 ;
import java. io. BufferedReader ;
import java. io. BufferedWriter ;
import java. io. FileReader ;
import java. io. FileWriter ;
import java. io. IOException ;
public class TestReplace {
public static void main ( String [ ] args) throws IOException {
BufferedReader br = new BufferedReader ( new FileReader ( "src/com/briup/day20/a.txt" ) ) ;
BufferedWriter bw= new BufferedWriter ( new FileWriter ( "src/com/briup/day20/a2.txt" ) ) ;
String s = null ;
while ( ( s= br. readLine ( ) ) != null ) {
if ( s. contains ( "* **" ) ) {
String str= s. replace ( "* **" , "1.8.0_301" ) ;
bw. write ( str) ;
bw. newLine ( ) ;
} else {
bw. write ( s) ;
bw. newLine ( ) ;
}
bw. flush ( ) ;
}
br. close ( ) ;
bw. close ( ) ;
}
}
5.RandomAccessFile随机访问流的特点
对象既可以读也可以写; 随机定位文件中的任意字节位置进行读或者写,并且可以前后反复定位; 创建该类的对象时,需要指定要操作的文件和操作的模式。
6.运用RandomAccessFile流向指定文件r.txt中的指定位置添加内容:文件内容aacc,往aacc中间添加两个字母bb。
package com. briup. day21 ;
import java. io. ByteArrayOutputStream ;
import java. io. RandomAccessFile ;
public class Method4 {
public static void main ( String [ ] args) throws Exception {
RandomAccessFile raf = new RandomAccessFile ( "src/com/briup/day21/r.txt" , "rw" ) ;
int index = 2 ;
String str = "bb" ;
ByteArrayOutputStream baos = new ByteArrayOutputStream ( ) ;
byte [ ] buf = new byte [ 1024 ] ;
int len = - 1 ;
raf. seek ( index) ;
while ( ( len = raf. read ( buf) ) != - 1 ) {
baos. write ( buf, 0 , len) ;
}
baos. flush ( ) ;
raf. seek ( index) ;
raf. write ( str. getBytes ( ) ) ;
raf. write ( baos. toByteArray ( ) ) ;
baos. flush ( ) ;
raf. close ( ) ;
baos. close ( ) ;
}
}
7.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
package com. briup. day21 ;
import java. io. FileReader ;
import java. util. Scanner ;
public class Method5 {
public static void main ( String [ ] args) {
int count = count ( ) ;
System . out. println ( "出现的次数为" + count) ;
}
public static int count ( ) {
System . out. println ( "请输入文件名:" ) ;
String filename = new Scanner ( System . in) . nextLine ( ) ;
System . out. println ( "请输入你想查询的字符串:" ) ;
String str = new Scanner ( System . in) . nextLine ( ) ;
FileReader fr = null ;
int count = 0 ;
try {
for ( int i = 0 ; i < str. length ( ) ; i++ ) {
fr = new FileReader ( filename) ;
char [ ] ch = new char [ str. length ( ) ] ;
fr. skip ( i) ;
int len = - 1 ;
while ( ( len = fr. read ( ch) ) != - 1 ) {
String newStr = new String ( ch, 0 , len) ;
if ( str. equals ( newStr) ) {
count++ ;
}
}
}
} catch ( Exception e) {
e. printStackTrace ( ) ;
} finally {
if ( fr != null ) {
try {
fr. close ( ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
}
}
return count;
}
}
package com. briup. day21 ;
import java. io. BufferedReader ;
import java. io. FileReader ;
import java. io. IOException ;
import java. io. InputStreamReader ;
import java. util. Arrays ;
public class Test2 {
public static void main ( String [ ] args) throws IOException {
InputStreamReader ir = new InputStreamReader ( System . in) ;
BufferedReader br = new BufferedReader ( ir) ;
System . out. println ( "请输入文件名:" ) ;
String path = br. readLine ( ) ;
System . out. println ( "请输入要读入的字符串:" ) ;
String str = br. readLine ( ) ;
char [ ] arr = str. toCharArray ( ) ;
FileReader fr = null ;
char [ ] arr2 = new char [ arr. length] ;
int count = 0 ;
for ( int i = 0 ; i < arr. length; i++ ) {
fr = new FileReader ( path) ;
int data = - 1 ;
fr. skip ( i) ;
while ( ( data = fr. read ( arr2, 0 , arr. length) ) != - 1 ) {
if ( Arrays . equals ( arr, arr2) ) {
count++ ;
}
System . out. println ( Arrays . toString ( arr2) ) ;
}
}
System . out. println ( count) ;
}
}