- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序可以替换文件中的内容。但是却导致了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/
我有一个文本文件,其中包含如下内容: Hello, my name is Joe What is your name? My name is Jack. That is good for you. 唯
我正在创建一个程序,需要从仍在写入的文件中读取。 主要问题是:如果使用在单独线程上运行的 InputStream 和 OutputStream 类执行读取和写入,有什么问题和问题为了防止数据损坏,我需
有人在使用Eclipse最新版本:202003时遇到过如下错误吗?我已经下载了它,将 Java 1.8 更新到最新的 Java 版本,启动 eclipse,添加我的 PHP 项目,在构建或验证或 DL
ImageIO.read(imagePath) 这个文件给出了一个 CMMException,为什么 Java 不能处理这个看似有效的文件 http://www.jthink.net/jaikoz/s
我有两个简单的示例文件,具有以下数据结构: 人.csv 0|John 1|Maria 2|Anne 和 项目.csv 0|car|blue 0|bycicle|red 1|phone|gold 2|p
好吧,我正在开发一个非常小的程序,旨在获取文本文件 test.txt 的内容,并将它们放入另一个空文件 testCopied.txt 中。诀窍是我想使用 Scanner 和 printWriter 因
我是一名优秀的程序员,十分优秀!