gpt4 book ai didi

JavaIO异常: Negative seek offset

转载 作者:行者123 更新时间:2023-12-01 11:33:41 28 4
gpt4 key购买 nike

我有一个程序可以替换文件中的内容。但是却导致了IO异常,我不知道我哪里逻辑错了?

代码如下:

import java.io.File;
import java.io.RandomAccessFile;

public class Test
{
public static void main(String args[]) throws Exception
{
File f = new File("test.txt");
replaceAll(f, "hello world", "my world");
}

public static void replaceAll(File file, String oldText, String newText) throws Exception
{
int[] indices = findAllIndices(file, oldText);
if(indices.length > 0)
{
for(int i=0;i<indices.length;i++)
{
replace(file, oldText, newText);
}
}
}

public static int[] findAllIndices(File file, String text) throws Exception
{
int[] indices;
int index = -1, count = 0, i=0;
String givenText = FileUtils.readFileToString(file);
index = givenText.indexOf(text);
while(index >= 0)
{
count++;
index = givenText.indexOf(text, index+1);
}
indices = new int[count];
index = givenText.indexOf(text);
while(index >= 0)
{
indices[i] = index;
index = givenText.indexOf(text, index+1);
i++;
}
return indices;
}

public static void replace(File file, String oldText, String newText) throws Exception
{
int index = findFirstIndex(file, oldText);
if(index >=0)
{
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.seek(new Integer(index).byteValue());
String emptyString = fixedLengthString(" ", oldText.length());
raf.write(emptyString.getBytes());
raf.seek(new Integer(index).byteValue());
raf.write(newText.getBytes());
}
}
}

MWE 是大代码的一部分。原始代码的堆栈跟踪是:

Exception in thread "main" java.io.IOException: Negative seek offset
at java.io.RandomAccessFile.seek(RandomAccessFile.java:538)
at org.javaextensions.FindAndReplace.replace(FindAndReplace.java:51)
at org.javaextensions.FindAndReplace.replaceAll(FindAndReplace.java:76)
at Test.main(Test.java:16)
Java Result: 1

最佳答案

    public static void replace(File file, String oldText, String newText) throws Exception
{
int index = findFirstIndex(file, oldText);
if(index >=0)
{
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.seek(new Integer(index).byteValue());

你的问题要么在这里^^

        String emptyString = fixedLengthString(" ", oldText.length());
raf.write(emptyString.getBytes());
raf.seek(new Integer(index).byteValue());

您应该检查 Integer(index.byteValue()) 的值,它很可能返回负数。另外,我不知道为什么你想将其转换为字节,也不知道为什么你首先创建一个 Integer 对象。两者都不是必要的

关于JavaIO异常: Negative seek offset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30216378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com