在java中覆盖文件内的值
Posted
技术标签:
【中文标题】在java中覆盖文件内的值【英文标题】:overwrite a value inside a file in java 【发布时间】:2014-07-19 13:06:37 【问题描述】:我使用这个在文件中创建一个整数矩阵,我想在创建它之后覆盖一个值,这是代码:
import java.io.File;
import java.io.FileWriter;
public class main
public static void main(String[] args)
File file = new File("foo/file.txt");
FileWriter writer = null;
try
file.createNewFile();
writer = new FileWriter(file);
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
writer.write(String.valueOf(0) + " ");
writer.write("\n");
catch (Exception e)
e.printStackTrace();
try
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (i == 3)
writer.write(String.valueOf(1) + " ");
writer.close();
catch (Exception e)
e.printStackTrace();
有什么建议吗? 谢谢。
【问题讨论】:
“不起作用”是什么意思。发生什么了?如果错误出现在“...”部分,您能否显示“不工作”示例的所有代码? "有什么建议吗?"是的。不要那样做。将修改后的内容写入新文件,并且仅在成功重命名为原始文件的情况下。如果覆盖失败,你认为会发生什么?"doesn't work"
我的意思是矩阵保持不变,在调用overwrite()
之后不会分配任何更改
一方面,if
语句的主体将执行多次......即,对于整行(i
将是 4 对于j
的每个值)。如果您只想写入单个值,则必须进一步缩小范围。
我很确定您的意思不是“被批准”——Java 并没有那么神奇。这是否与您之前的 writer
相同,以便将新文本附加到先前的输出中?或者你想写一个新文件?或者覆盖您之前创建的同一个文件?请说明你在做什么。
【参考方案1】:
遗憾的是,在这种情况下,没有办法只替换普通文件中的一个值。您需要先进行某种形式的读入,然后再覆盖该文件。
在这种情况下,Java 的最佳实践是将内容存储在数据结构中。在这种情况下,您应该使用某种类型的矩阵,它只是一个数组数组
int[][] values = new int[x][y];
一旦通过读取文件创建,您只需使用相同的代码将其写入文件。
如果内存成为问题,那么您可能需要使用临时文件查看流读写。
希望对你有帮助!
【讨论】:
【参考方案2】:是否有任何特定原因需要覆盖一个值而不是重写整个文件?在 C++ 中,您可以手动设置流中的写入位置,但它会覆盖后面的任何内容。
不管怎样,看看这个问题和答案: how to write content in a Specific position in a File
【讨论】:
【参考方案3】:查看随机访问文件。如果它不起作用,您可能必须重写整个文件。
【讨论】:
考虑到文件的访问方式有很多未知数,这似乎不是一个合适的答案。以上是关于在java中覆盖文件内的值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .env 文件覆盖 fastlane 的 appfile 中的值