这个文件有几十兆,不代表整个读入,不是占用几十兆内存。先写入头部的文字,再循环读一点源文件,写一点源文件。
RandomAccessFile 也可以,只是最初要留出空间,比如一些空格
String str = "...."char[] chars = str.toCharArrays
chars中存储的char就是一个个的short值,这些值就是字符串的unicode值,如果你的字符串都是英文,那么该unicode就等于其ascii值。
直接把这个数组写入文件即可。
说一下你错误的原因吧:看一下你的这两行代码:
1、while((b=input.read())!=-1)
2、 while(((b=input.read())!=-1) &&((b=input.read())!=32))
第1次(while)执行完毕的时候文件,读取文件的指针已经到达末尾了,你的第2步继续用(while)从里面读取,肯定是空的,所以后面的执行都不能继续下去。你可以看下参看一下我的代码,功能基本实现了的。
package javaTest
import java.io.*
public class CharTest {
//如何用java实现统计文本中的字符数(分包含不包含空格)
//及将大写字母转换为小写字母后复制到另一个文件
FileReader fr=null
FileWriter fw=null
BufferedReader br=null
BufferedWriter bw=null
String value=null
String value2=""
int lon
public static void main(String[] args) {
new CharTest()
}
public CharTest(){
try {
fr=new FileReader("d:/1.txt")
br=new BufferedReader(fr)
while((value=br.readLine())!=null){
value2+=value
}
//1统计读取到多少个字符
lon=value2.length()
System.out.println("一共读取到"+lon+"个字符")
//2将读取到的数据以空格的方式分割以后放入字符数组中
String string[]=value2.split(" ")
//3统计一共有多少个空格
System.out.println("空格字符数为"+(string.length-1))
//4、将读取到得内容转换成小写
String lowerCase=value2.toLowerCase()
//5、将转换以后的字符串写入到另一个文件中区
fw=new FileWriter("d:/2.txt")
bw=new BufferedWriter(fw)
bw.write(lowerCase)
} catch (Exception e) {
e.printStackTrace()
}finally{
try {
if(br!=null){
br.close()
}
if(fr!=null){
fr.close()
}
if(bw!=null){
bw.close()
}
if(fw!=null){
fw.close()
}
} catch (Exception e) {
e.printStackTrace()
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)