gpt4 book ai didi

java - 调用 RandomAccessFile 实例的 setLength 方法时出现无效参数错误

转载 作者:行者123 更新时间:2023-12-02 04:34:43 29 4
gpt4 key购买 nike

这是代码:

package vu.co.kaiyin;

import java.io.FileOutputStream;
import java.io.RandomAccessFile;



import java.io.*;

/**
* Created by IDEA on 14/06/15.
*/
public class Test {

public static void truncateFromEnd(File filename, int n) throws Exception {
if(n < 0) {
throw new Exception("Can't truncate by a negative number");
}
try (RandomAccessFile raf = new RandomAccessFile(filename, "r")) {
long originalLength = raf.length();
long newLength = originalLength - (long) n;
if(newLength < 0) {
newLength = 0;
}
raf.setLength(newLength);
}
}

public static void truncateFromEnd(String filename, int n) throws Exception {
truncateFromEnd(new File(filename), n);
}

public static void main(String[] args) throws Exception {
FileOutputStream fo = new FileOutputStream("/tmp/bin.out");
byte[] data = new byte[] {1, 2, 3, 4, 5};
fo.write(data);
fo.close();
truncateFromEnd("/tmp/bin.out", 1);
}
}

这是错误:

/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14 CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Users/kaiyin/workspace/BedWorks/target/classes:/Applications/IntelliJ IDEA 14 CE.app/Contents/lib/junit-4.11.jar:/Applications/IntelliJ IDEA 14 CE.app/Contents/lib/hamcrest-core-1.3.jar:/Applications/IntelliJ IDEA 14 CE.app/Contents/lib/hamcrest-library-1.3.jar:/Users/kaiyin/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar:/Users/kaiyin/.m2/repository/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:/Applications/IntelliJ IDEA 14 CE.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain vu.co.kaiyin.Test
Picked up _JAVA_OPTIONS: -Xms256m -Xmx2g
Exception in thread "main" java.io.IOException: Invalid argument
at java.io.RandomAccessFile.setLength(Native Method)
at vu.co.kaiyin.Test.truncateFromEnd(Test.java:25)
at vu.co.kaiyin.Test.truncateFromEnd(Test.java:30)
at vu.co.kaiyin.Test.main(Test.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Process finished with exit code 1

我做错了什么吗?

最佳答案

您可能需要通过在构造函数中传递 rw(读/写)来授予您的 RandomAccessFile 写入权限。

try (RandomAccessFile raf = new RandomAccessFile(filename, "rw"))

如果您要更改文件长度,那么您肯定是在写入它。

关于java - 调用 RandomAccessFile 实例的 setLength 方法时出现无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30990163/

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