java - java中通过分隔符读取文件

标签 java

我有一个图像文件,其末尾附加了另一个文件,并用字符串分隔符分隔。我想做的是将java中的两个文件分开,将附加到末尾的文件写入它自己的文件中,我尝试了一些解决方案,但是它们要么损坏了文件,要么效率低下。有人能给我指出正确的方向吗?

这是迄今为止我拥有的最好的解决方案,它几乎可以工作,但会稍微损坏文件。

public class FileExtractor {

    private static final String START_OF_FILE_DATA = "SOFD34qjknhwe3rjkhw";

    public void extractFile(String[] files)
    {
        try 
        {
            String first = readFileToString(files[0]);
            Pattern p1 = Pattern.compile(START_OF_FILE_DATA + "(.*)" + START_OF_FILE_DATA + "(.*)", Pattern.DOTALL);
            Matcher matcher1 = p1.matcher(first);
            String filename = "";
            if(matcher1.find())
            {
                filename = matcher1.group(1);
            }
            else
            {
                //throw exception of corrupted file
            }
            FileOutputStream out = new FileOutputStream(new File("buildtest/" + filename));
            out.write(matcher1.group(2).getBytes("cp1251"), 0, matcher1.group(2).length());
            for (int i = 1; i < files.length; i++) 
            {
                String content = readFileToString(files[i]);
                Pattern p = Pattern.compile(START_OF_FILE_DATA + "(.*)", Pattern.DOTALL);
                Matcher matcher = p.matcher(content);
                if(matcher.find())
                {
                    out.write(matcher.group(1).getBytes("cp1251"), 0, matcher.group(1).length());
                }
                else
                {
                    //throw exception of corrupted file
                }
            }
            out.close();
        } 
        catch (IOException e) 
        {
            System.out.println(e.getMessage());
        }
    }

    private String readFileToString(String file)
    {
        byte[] buffer = new byte[(int) new File(file).length()];
        BufferedInputStream f = null;
        try {
            f = new BufferedInputStream(new FileInputStream(file));
            f.read(buffer);
        } 
        catch (Exception e)
        {

        }
        finally 
        {
            if (f != null) {
                try {
                    f.close();
                } catch (IOException ignored) {
                }
            }
        }
        String ret = "";
        try
        {
            ret = new String(buffer, "cp1251");
        }
        catch(Exception e)
        {

        }
        return ret;

    }

最佳答案

Scanner使用 useDelimiter() 方法执行此操作。基本上:

Scanner in = new Scanner(new File(your_file_name));
in.useDelimiter(START_OF_FILE_DATA);

String first = in.next();   // Read the first part
String seconds = in.next(); // Read the second part

// Save the separate files

关于java - java中通过分隔符读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038653/

相关文章:

java - 增加 WildFly 中的 JTA 事务超时限制

javascript - 处理JSP页面时发生异常 - 类型异常报告

java swing - 在 java swing 中创建一个类似旋转木马的按钮

java - 如何修复 RadioButton 的宽度,使小部件不依赖于文本大小

java - xstream 原始反序列化不起作用?

Java URL 下载返回元刷新标记而不是内容

java - 在 Visual VM 中限制分析

java - 如何将当前日期和时间打印到外部文本文档?

java - 如何制作我们软件的试用版

java - Android inputType ="numberDecimal"调出没有逗号的键盘