gpt4 book ai didi

java - 限制安卓文件大小

转载 作者:行者123 更新时间:2023-11-29 04:50:30 25 4
gpt4 key购买 nike

背景

我在 android 存储中保留了一个相对较大的文本文件,并定期附加到它 - 同时将文件的大小限制为某个任意大小(比如 2MB)

希望我在某处遗漏了一个功能,或者希望有更好的方法来完成这个过程。

目前,当文件 a 超过任意大小时,我创建一个临时文件 b,复制文件 a 的相关部分> (或多或少是文件 a 的子字符串,从字节 xxx 开始,其中 xxx 是字节数,如果我写下一个数据到日志)加上当前数据,然后用第二个文件 b 覆盖文件 a

这显然是非常低效的...

另一个我不太喜欢的解决方案是保留两个文件,并在两个文件之间切换,当当前文件已满时清除下一个文件,然后切换到该文件进行输出。

但是,如果我能做这样的事情就太方便了

File A = new File("output");
A.chip(500);

或者也许

A.subfile(500,A.length()-500);

TLDR;

是否有适用于 Android 的函数或库可以删除文件的一部分?

最佳答案

您是否已经看过 RandomAccessFile ?虽然您不能删除文件的某些部分,但您可以在文件中寻找任何位置,甚至可以设置长度。因此,如果您检测到您的文件变得太大,只需捕获相关部分并跳到开头。将长度设置为 0 并写入新数据。

编辑:

我写了一个小演示。它显示文件大小是否限制为 10 个字节。如果将值 10 到 15 作为字符串传递并用逗号分隔,则在 10,11,12 之后,文件从头开始写入,因此在 15 之后读取 13,14,15

public class MainActivity extends Activity {

private static final String TAG = MainActivity.class.getSimpleName();
private static final long MAX = 10;
private static final String FILE_TXT = "file.txt";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
for (int i = 10; i <= 15; i++) {
if (i > 10) {
writeToFile(",");
}
writeToFile(Integer.toString(i));
}
}

private void writeToFile(String text) {
try {
File f = new File(getFilesDir(), FILE_TXT);
RandomAccessFile file = new RandomAccessFile(f, "rw");
long currentLength = file.length();
if (currentLength + text.length() > MAX) {
file.setLength(0);
}
file.seek(file.length());
file.write(text.getBytes());
file.close();
} catch (IOException e) {
Log.e(TAG, "writeToFile()", e);
}
printFileContents();
}

private void printFileContents() {
StringBuilder sb = new StringBuilder();
try {
FileInputStream fin = openFileInput(FILE_TXT);
int ch;
while ((ch = fin.read()) != -1) {
sb.append((char) ch);
}
fin.close();
} catch (IOException e) {
Log.e(TAG, "printFileContents()", e);
}
Log.d(TAG, "current content: " + sb.toString());
}
}

关于java - 限制安卓文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586604/

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