文件复制

首先是文件的复制,文件将数据读取出来,所以直接一边读一边写,就行,也不会涉及,文字编码的问题。
先写一个

1
void cp(File f1,File f2);

的函数,如果想知道复制结果可以返回一个布尔型。
函数部分如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FileInputStream fi= new FileInputStream(f1);
         FileOutputStream fo= new FileOutputStream(f2);
 
         byte [] buffer= new byte [ 1024 ];
         int off= 0 ;
         int length= 1024 ;
         while ( true ){
             if (fi.available()< 1024 )
                 length=fi.available();
         fi.read(buffer, off,length);
         fo.write(buffer, off, length);
         off+= 1024 ;
         if (length< 1024 )
             System.out.println(f1+ "-->" +f2+ "复制完成!" );
         fi.close();
         fo.close();
             return ;

使用byte数组1kb的复制,然后使用input读入f1,buffer,之后使用output写入f2,如果读取长度小于2014,说明已经到达文件尾部,使用available得到实际的长度,然后再写入。
然后要忘记关闭流。
然后是将数据读取
原题为

读取 msg.txt 中的内容,

分割出每个人的信息,样式如下: 01 张三 20 02 李四 18 。。。。
通过上面的字符串获取学号,姓名,年龄创建Student类,并将Student类的对 象保存到一个ArrayList集合中, 然后 遍历集合中的数据 通过迭代器
msg.txt

  01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21
  

首先,Student类,有三个属性.
然后,我们写的函数的应该接受一个File,然后返回一个ArrayList,泛型为Student。如下

ArrayList<Student> readStudent(File f)throws IOException

在这里先使用FileInputStream获得数据流,然后使用InputStreamReader来进行处理,是用InputStreamReader可以进行编码上的改变,对于网络应用程序来说,编码之间的转换是十分头疼的,对于系统自带的记事本来说,默认中文为GBK,有时候我们用的是UTF-8,注意编码即可。
得到数据流之后,使用read()来读取数据进入String,通过返回值是否为-1来判断是否到头。然后使用split函数来切割成String数组,在将数组里的值赋给ArrayList即可
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FileInputStream fis= new FileInputStream(f);
         String buffer= "" ;
         InputStreamReader isr= new InputStreamReader(fis, "GBK" );
         int tmp;
         while ((tmp = isr.read()) != - 1 ){
             buffer += ( char )tmp;
             }
         String stu= new String(buffer);
         ArrayList&lt;Student&gt; re= new ArrayList&lt;Student&gt;();
         String[] ssss=stu.split( "[*]|[#]" );
         for ( int i= 0 ;i&lt;ssss.length;i+= 3 ){
             re.add( new Student(Integer.parseInt(ssss[i]), ssss[i+ 1 ], Integer.parseInt(ssss[i+ 2 ])));
         }
         fis.close();
         return re;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值