【问题标题】:Problems with saving to a file in processing在处理中保存到文件的问题
【发布时间】:2021-05-24 12:16:10
【问题描述】:

我在保存正在处理的文件时遇到了一个小问题。该程序会保存所有内容,但是当您关闭该程序并再次打开它时,该文件将重置为零并从头开始保留记录。据我了解,这完全是由于打开程序时再次创建了文件。有谁知道如何打开一个已经创建的文件并写入它?

我会附上初始化部分:

    void setup() { 
        size(330, 450);// создаем рабочее окно размером 800х600 точек
        surface.setTitle("Передача данных");//подпись вверху экрана
        printArray(Serial.list());//выводим активные порты на экран или монитор
        port = new Serial(this, Serial.list()[0], 9600);//выбираем порт но ето не точно
        //работа с файлами
        cp5 = new ControlP5(this);
        front = loadFont("TimesNewRomanPS-BoldItalicMT-20.vlw");//подгружаем шрифт
        output0 = createWriter("POST1.txt");//создаем файл для логов с поста 1
        output1 = createWriter("POST2.txt");// создаем файл длялогов с поста два
        
        //создание списков
        cp5 = new ControlP5(this);
        p1 = cp5.addDropdownList("Post 1")//выпадающий список для поста 1
        .setPosition(100,100);//положение (x,y)
        p1.addItem(c11,c11);//пункты выпадающегосписка
        p1.addItem(c12,c12);
        p1.setColorBackground(color(60));
        p1.setColorActive(color(255, 128));
         
        p2 = cp5.addDropdownList("Post 2")//те же шаги но для списка 2
        .setPosition(100,150);
        p2.addItem(c11,c11);
        p2.addItem(c12,c12);
        p1.setColorBackground(color(60));
        p1.setColorActive(color(255, 128));
        
        //customize(p1);
        //customize(p2);
        }

下拉列表的点击被处理后写入文件的部分:

    void controlEvent(ControlEvent theEvent){
      String name = theEvent.getName();
      float value = theEvent.getController().getValue();
      int i = 0;
      if(name.startsWith("Post 1")){
        if(value==0.0){
          //data = loadStrings("POST1.txt");
           println("test code0");
           selection.println("test code0" + " " + day()+"."+month()+"."+year()+" "+hour()+":"+minute()+":"+second());
           //("POST1.txt");
           output0.flush();
           //output0.close();
           //exit();
         }  
        if(value==1.0){
          println("test code1");
          output0.println("test code1" + " " + day()+"."+month()+"."+year()+" "+hour()+":"+minute()+":"+second());
          output0.flush();
          output0.close();
          exit();
          }
        }
    }

【问题讨论】:

    标签: file save processing


    【解决方案1】:

    是的,使用与现有文件相同的名称调用createWriter 将用新的空白文件覆盖文件,准备好输出。因此,在创建输出编写器之前,您需要将文件(如果存在)读入您的草图中。

    createWriter 的对应物是 createReaderreference 展示了如何读取文件并解析内容的示例。

    在该示例中,它们只是将内容绘制到屏幕上。这可能对您有用,或者您可能需要将内容存储在您的草图中(在数组或其他数据结构中),直到您准备好将数据写回文件(已进行任何修改)。

    根据您要保存和加载的具体内容,您可能会查看saveJSONObjectloadJSONObject。如果您使用更复杂的数据结构,它可以使加载和解析文件变得更容易。

    【讨论】:

    • 非常感谢您的回答。我试图将数据写入 JSON 文件,但我不太明白如何让它写入新数据,而不是覆盖现有数据。就在我的程序中,数据是通过点击来记录的。我有一个想法通过递增计数器来更改记录 ID,但它不起作用,所以我放弃了它。经过大量测试后,我决定创建一个附加文件,我将在其中复制已有的数据,然后在重新创建后将其写回原始文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-07-03
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多