求java高手,java读取txt中内容,按内容拆分成多个txt,如下图,拆分成两个txt文件

求java高手,java读取txt中内容,按内容拆分成多个txt,如下图,拆分成两个txt文件,第1张

没有定拆分规则   以下代码是前5个行为一个txt   其余的为另外一个txt

package com.kidd.baiduzhidao

import 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 

        }

        

    }

    /**

     * 写出数组内容从start开始的所有内容到txt文件

     * @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了。

解决问题有很多很多方法,平时要多多练习一定会有长进。

这可能是你的作业,所以就不具体打出所有详细代码了吧,祝你学习进步


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存