如何在java中搜索文件的特定日期和时间(由用户输入)

问题描述 投票:0回答:1

我试图弄清楚如何在 .txt 文件中搜索用户给出的特定日期和时间。目前我的代码是这样做的:

PRINT "Enter the date of the task: "
READ into task_date (string)
PRINT "Enter the time of the task: "
READ into task_time (string)
PRINT "Enter the name of the task: "
READ into task_name (string)
LOAD tasks.txt file

我希望能够在这三个步骤中从用户那里读取数据(是的,我知道一步完成可能会更好,但这更多的是对朋友的概念证明),然后搜索tasks.txt 文件中留出一个空格来插入task_date + task_time + task_name。任何帮助,将不胜感激。谢谢

编辑: 好的,我正在创建一个当前基于终端的日历应用程序。 它的作用是让用户输入任务日期/时间/名称并将其附加到名为tasks.txt的文件中的正确位置(文件示例如下)

10-6-2020 6:30 am Wake up
10-6-2020 7:00 am Take mom to school
10-6-2020 7:30 am arrive back home
10-6-2020 8:30 am leave for class
10-6-2020 9:00 am arrive on campus
10-6-2020 12:00 pm leave campus
10-6-2020 12:30 pm arrive back home
10-6-2020 1:00 pm Meeting with advisors

假设用户输入“10-06-2020 10:00 am Walk into class” 我希望代码在上午 9:00 到中午 12:00 之间插入该行

如果我发布的第一个问题不完整,我深表歉意。

编辑2: 我的问题不是让其他人为我编码。我的问题是任何人都可以指出如何在 txt 文件的正确位置附加字符串的方向。 (如果你感到困惑,请看上面)。再说一遍,我不会要求任何人为我编码。

      System.out.print("Enter the date of the task: ");
// //     STRING task_time = INPUT
      task_date = scan.nextLine();
// //     PRINT "Enter the name of the task: "
      System.out.print("Enter the time of the task: ");
// //     STRING task_name = INPUT
      String task_time = scan.nextLine();
// //     CREATE new_task = task_date + task_time + task_name (STRING)
      // String new_task = task_date;
      System.out.print("Enter the name of the task: ");
      // STRING task_date = INPUT
      String task_name = scan.nextLine();
      String task = task_date + " " + task_time  + " " + task_name;
      System.out.println(task);
//     LOADFILE tasks.txt
      String search_date = task_date;
      String search_time = task_time;
      int lineNumber = 0;
      File taskstxt = new File("tasks.txt");
      Scanner filereader = new Scanner(taskstxt);
//     SEARCH tasks.txt for corresponding date and time
      while (filereader.hasNextLine()) {
        final String lineFromFile = filereader.nextLine();
        if (lineFromFile.contains(search_date)) {

        }
      }

上面是有问题的代码片段。我想在txt文件中搜索用户输入的日期和时间,如果存在则打印“您已经有该时间的任务”,如果不存在我想在文件中附加任务日期/时间/姓名。如果这让任何人感到困惑,我很抱歉(我发现有时很难准确地写出我的想法)

java
1个回答
1
投票

如何用 Java 构建“日历应用程序”?

根据您的上述设计,您的应用程序将具有以下内容:

  1. 用于添加记录的 UI(当前是命令行,但您可能需要考虑 Web UI、Android、Swing 或其他替代方案)
  2. 用于显示记录的 UI
  3. 用于保存记录的数据存储(当前是文本文件,但您可能需要考虑“结构化文本”格式,如 JSON 或 XML,或数据库)。

如何将新的日历记录保存在正确的位置?

我建议:

  1. 编写一个“TaskList”类来保存您的日历记录。

    简单示例:

    public class TaskList {
      public List<TaskRecord> tasks;
    
      public void save(string filename) { ... }
      public void load(string filename) { ... }
    }
    
  2. 为各个任务编写一个“TaskRecord”类:

    简单示例:

    public class TaskRecord {
      public Date dateTime;
      public String taskText;
    }
    
  3. 将“日期”与课堂上的“文本”分开非常重要。

    如果您想要一个简单的文本文件,并且希望所有内容都在同一行,那么请选择一个易于解析的分隔符。例如,您可以使用制表符分隔“日期”和“时间”(

    \t
    ):

    10-6-2020 6:30 am\tWake up

  4. 在您准备好“保存”更新的文件之前,“将记录插入到正确的位置”可能并不重要。您可以在“write()”之前简单地“sort()”(按日期/时间):

    简单示例:

     public class TaskRecord implements  Comparator<Date> {
       public Date dateTime;
       public String taskText;
    
       @Override
       public int compare(TaskRecord a, TaskRecord b) {
         return a.datetime.compareTo(b.datetime);
       }
     }
    
  5. 如果您确实想在插入时对每个新记录进行排序,您可能仍然需要实现“比较器”(如上所述)。您将循环浏览列表,直到找到时间/日期 >= 新日期,然后在该索引处按

    List.add()

  6. 您可能还想向“TaskList”类添加方法来添加、修改和/或删除记录。

  7. “封装”可以让你的类更加健壮。您想要隐藏该类的用户对于该类来说不是“必需”的所有内容

    简单示例:

       public class TaskRecord implements  Comparator<Date> {
         private Date dateTime;
         private String taskText;
    
         // Initialize object state in constructor
         public TaskRecord(Date dateTime, String taskText) {
           this.dateTime = dateTime;
           this.taskText = taskText;
         }
    
         // "Getter" methods for read-only access
         Date getDateTime() { return dateTime; }
         String getTaskText() { return taskText; }
    
         @Override
         public int compare(TaskRecord a, TaskRecord b) {
           return a.datetime.compareTo(b.datetime);
         }
    
       }
    
© www.soinside.com 2019 - 2024. All rights reserved.