在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中覆盖文件内的值的主要内容,如果未能解决你的问题,请参考以下文章

Maven 配置文件属性不会覆盖弹簧配置中的值

覆盖文件Python中字段的值:字符串对象错误

如何使用 .env 文件覆盖 fastlane 的 appfile 中的值

用其他文件夹覆盖布局文件夹路径

在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?

如何覆盖Java中特定位置的文件内容? [复制]