文字列区切り記号で区切られた別のファイルが最後に追加された画像ファイルがあります。私がやろうとしているのは、Javaで2つのファイルを分離して、最後に追加されたファイルを独自のファイルに書き込むことです。いくつかの解決策を試しましたが、ファイルが破損するか、絶望的に非効率的でした. 誰かが私を正しい方向に向けてもらえますか?
これは私がこれまでに持っている最良の解決策です。ほとんど機能しますが、ファイルがわずかに破損します。
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;
}