没有定拆分规则 以下代码是前5个行为一个txt 其余的为另外一个txt
package com.kidd.baiduzhidaoimport java.io.File
import java.io.FileNotFoundException
import java.io.FileWriter
import java.io.IOException
import java.util.Scanner
public class baiduzhidao {
public static void main(String[] args) {
File file = new File("D:"+File.separator+"t1.txt")
String[] ss = readTxt(file)
if(ss==null || ss.length==0){
System.out.println("读取txt内容发生错误,txt内容可能为空.")
return
}
file = new File("D:"+File.separator+"1.txt")
if(!writeTxt(file, ss ,0, 5)){
System.out.println("写入第一个txt发生了错误.终止")
return
}
file = new File("D:"+File.separator+"2.txt")
if(!writeTxt(file, ss ,5)){
System.out.println("写入第二个txt发生了错误.终止")
return
}
}
/**
* @param file 待写出的txt文件的File形式
* @param ss 数组对象
* @param start 开始位置
* @return 成功返回true 发生错误返回false
*/
private static boolean writeTxt(File file, String[] ss, int start) {
return writeTxt(file,ss,start,ss.length-start)
}
/**
* 写出数组内容从start位置开始共写出length个 到txt文件
* @param file 待写出的txt文件的File形式
* @param ss 数组对象
* @param start 开始位置
* @param length 写出长度
* @return 成功返回true 发生错误返回false
*/
private static boolean writeTxt(File file, String[] ss,int start, int length) {
FileWriter fWriter
try {
fWriter = new FileWriter(file, false)
} catch (IOException e) {
e.printStackTrace()
return false
}
try {
for(int i = start , k = ss.length i < k && i < start+length i++){
fWriter.write(ss[i]+"\r\n")
}
} catch (IOException e) {
e.printStackTrace()
if(!closeFileWriter(fWriter)){
fWriter = null
}
return false
}
if(!closeFileWriter(fWriter)){
fWriter = null
}
return true
}
/**
* 关闭文件流
* @param fWriter
* @return 成功关闭返回true,发生错误返回false
*/
private static boolean closeFileWriter(FileWriter fWriter) {
if(fWriter==null){
return false
}
try {
fWriter.close()
} catch (IOException e) {
e.printStackTrace()
}
return true
}
/**
* 读取txt文件内容,返回该文本内容的String[]形式
* @param file txt文件的File形式
* @return 该文本内容的String[]形式 若读取发生错误 则返回null
*/
private static String[] readTxt(File file) {
Scanner scanner
try {
scanner = new Scanner(file)
} catch (FileNotFoundException e) {
e.printStackTrace()
return null
}
String string = ""
/**
* 读取到的每一行用,分割
*/
while (scanner.hasNext()) {
string += scanner.nextLine() + ","
}
scanner.close()
return string.split(",")
}
}
import java.io.*public class SegFile{
/**
*根据需求,直接调用静态方法start来执行 *** 作
*参数:
* rows 为多少行一个文件 int 类型
* sourceFilePath 为源文件路径 String 类型
* targetDirectoryPath 为文件分割后存放的目标目录 String 类型
* ---分割后的文件名为索引号(从0开始)加'_'加源文件名,例如源文件名为test.txt,则分割后文件名为0_test.txt,以此类推
*/
public static void start(int rows,String sourceFilePath,String targetDirectoryPath){
File sourceFile = new File(sourceFilePath)
File targetFile = new File(targetDirectoryPath)
if(!sourceFile.exists()||rows<=0||sourceFile.isDirectory()){
System.out.println("源文件不存在或者输入了错误的行数")
return
}
if(targetFile.exists()){
if(!targetFile.isDirectory()){
System.out.println("目标文件夹错误,不是一个文件夹")
return
}
}else{
targetFile.mkdirs()
}
try{
BufferedReader br = new BufferedReader(new FileReader(sourceFile))
BufferedWriter bw = null
String str = ""
String tempData = br.readLine()
int i=1,s=0
while(tempData!=null){
str += tempData+"\r\n"
if(i%rows==0){
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())))
bw.write(str)
bw.close()
str = ""
s += 1
}
i++
tempData = br.readLine()
}
if((i-1)%rows!=0){
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())))
bw.write(str)
bw.close()
br.close()
s += 1
}
System.out.println("文件分割结束,共分割成了"+s+"个文件")
}catch(Exception e){}
}
//测试
public static void main(String args[]){
SegFile.start(11,"d:/test/test.txt","d:/test/test/")
}
}
/*
把代码改了下,先前的代码在行数刚好分完的情况下会多分一个空白文件,现在不存在这个问题了
*/
java 的String有split主法你知道吗?一。 首先,找出句子的规律,得出:
1。凡句子都是有空格
2。凡句子都是最后带符号“。?!;”等
二。 使用split方法将你的字符串分成N个字符串数组
String text = "你好,亲爱的。我想你知道你今天好吗?我想你。"
String[] subStrings = text.split(" ")
得到这个数组后遍历数组,找出数组中含有规定标点符号的,并加上“F”
for(int i=0i<subStrings.lengthi++){
String sub = subStrings[i]
if(sub.equals("。")||sub.equals(";")sub.equals("?")){
sub = "<f>"+sub+"</f>"
}
}
另外,按照规定句子结束是有空格的,但万一你的需求就是没有空格怎么办?
这样你就换一种思路,用动态数组来做Vector或者ArrayList,遍历你的字符串,如果遇到规定的符号,则截取子字符串并加入到你的vector中。 最后遍历vector跟上面遍历数组的方法一样。
或者最笨最简单的方法就是第一次遍历你的字符串,每次遇到名号分号和问号就插入一个空格。然后再用上面我写的方法变成数组,再遍历数组就OK了。
解决问题有很多很多方法,平时要多多练习一定会有长进。
这可能是你的作业,所以就不具体打出所有详细代码了吧,祝你学习进步
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)