【问题标题】:overwrite a value inside a file in java在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 相同,以便将新文本附加到先前的输出中?或者你想写一个新文件?或者覆盖您之前创建的同一个文件?请说明你在做什么。

标签: java


【解决方案1】:

遗憾的是,在这种情况下,没有办法只替换普通文件中的一个值。您需要先进行某种形式的读入,然后再覆盖该文件。

在这种情况下,Java 的最佳实践是将内容存储在数据结构中。在这种情况下,您应该使用某种类型的矩阵,它只是一个数组数组

int[][] values = new int[x][y]; 

一旦通过读取文件创建,您只需使用相同的代码将其写入文件。

如果内存成为问题,那么您可能需要使用临时文件查看流读写。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    是否有任何特定原因需要覆盖一个值而不是重写整个文件?在 C++ 中,您可以手动设置流中的写入位置,但它会覆盖后面的任何内容。

    不管怎样,看看这个问题和答案: how to write content in a Specific position in a File

    【讨论】:

      【解决方案3】:

      查看随机访问文件。如果它不起作用,您可能必须重写整个文件。

      【讨论】:

      • 考虑到文件的访问方式有很多未知数,这似乎不是一个合适的答案。
      猜你喜欢
      • 2012-11-23
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2014-10-22
      • 2011-06-24
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多