【问题标题】:How can I compare an integer and a file name?如何比较整数和文件名?
【发布时间】:2024-01-11 01:40:02
【问题描述】:

我正在尝试制作一个登录/密码程序,该程序会询问您是否有帐户,您也可以创建一个。
我的意思是程序会给你一个随机的 8 位数字。
我还有一个 FileWriter,它根据您提供的 ID 创建一个文件。我有一个 FileReader,它最终会读取您之前导出到文件中的内容,以便您更新它。

我遇到的问题是,当我询问用户是否已经有帐户时,如果他们说是,它会询问用户他们的用户 ID。

我的计划是,当它读取您的 UserID 时,它会扫描我保存 .java 文件的文件夹,并查找与您的 UserID 同名的 .txt 文件。例如,如果您创建一个帐户并且它给您的 UserID 是 12345678,它将创建一个名为 12345678 的文件,然后当您输入您的 UserID 时,它会扫描以查看该文件是否存在。

目前出现的问题是它打印出来

找不到错误文件(我写的catch字符串)

即使我在文件夹中有那个文件。
我认为我比较查看 UserID 是否与任何文件名匹配的方式有问题。

“登录”类。

import java.awt.*;
import hsa.Console;
import java.util.Random;
import java.io.*;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.FileNotFoundException;

public class Login
{
static Console c;

static Login player1;

public static void main (String[] args)

{
    player1 = new Login ();
    player1.FileReaderTest (25756326);
    //player1.Userlogin (); //I think it has something to do with this
} // main method


public void Userlogin (File input)
{
    c = new Console ();

    Random rand = new Random ();

    c.println ("Hello do you have an account?");
    String Q1 = c.readLine ();
    Q1 = Q1.toUpperCase ();
    if (Q1.equals ("YES"))
    {
        c.println ("Please input your User ID");
        int login = c.readInt ();
        if (String.valueOf(login).equals (input))//I think it has something to do with this
        {
            try
            {
                FileReader reader = new FileReader (input);
                BufferedReader buf = new BufferedReader (reader);

                String line1 = buf.readLine ();
                String line2 = buf.readLine ();

                buf.close ();
                c.println (line1);
                c.println (line2);

            }
            catch (FileNotFoundException e)
            {
                c.println ("Error File Not Found");

            }
            catch (Exception e)
            {
                c.println ("ERROR");

            }


        }
    }

    else if (Q1.equals ("NO"))
    {
        c.println ("Please enter your name ");
        String name = c.readLine ();
        int UserID = rand.nextInt (99999999);
        c.println ("Your User ID is " + UserID);
        player1.FileCreation (UserID);
        player1.FileReaderTest (UserID);
    }

    while (!Q1.equals ("YES") && !Q1.equals ("NO")) //While Q1 != YES || NO
    {
        c.println ("Please Answer the question with Yes or No");
        c.println ("Hello do you have an account?");
        String Q2 = c.readLine ();
        Q2 = Q2.toUpperCase ();
        if (Q2.equals ("YES"))
        {
            c.println ("Ok lets start");
            break;
        }
        else if (Q2.equals ("NO"))
        {
            c.println ("Please enter your name ");
            String name = c.readLine ();
            int UserID = rand.nextInt (89999999) + 10000000;
            c.println ("Your User ID is " + UserID);
            player1.FileCreation (UserID);
            player1.FileReaderTest (UserID);
            break;
        }

    } //While Q1 != YES || NO



} //Public void Main


public void FileReaderTest (int UserID)
{
    File input = new File (String.valueOf (UserID));
    player1.Userlogin (input);

    try
    {
        FileReader reader = new FileReader (input);
        BufferedReader buf = new BufferedReader (reader);

        String line1 = buf.readLine ();
        String line2 = buf.readLine ();


        buf.close ();
        c.println (line1);
        c.println (line2);

    }
    catch (FileNotFoundException e)
    {
        c.println ("Error File Not Found");

    }
    catch (Exception e)
    {
        c.println ("ERROR");

    }




}


public void FileCreation (int UserID)
{
    try
    {
        Writer writer = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (String.valueOf (UserID)), "utf-8"));
    }
    catch (IOException ex)
    {
    }
}
} // Login class

【问题讨论】:

  • 如何比较字符串和文件?
  • 我不知道这个hsa.Console类在做什么。
  • 你需要将其与文件名而不是文件进行比较
  • 您是否尝试过制作配置文件?配置文件更易于阅读和比较。
  • @cricket_007 因为我们学校不想接触实际的 Java,所以我们使用 hsa 控制台,它基本上为我们制作了一个简单的 jframe。

标签: java file int equals


【解决方案1】:

所以,你有一个File input,并且你想比较文件的名称,所以你想要

String.valueOf(login).equals (input.getName());

如果您在

上遇到错误
File input = new File (String.valueOf (UserID));

然后请注意:例如,"2.txt" 与仅命名为 "2" 的文件非常不同(值得一提,因为 Windows 默认隐藏文件扩展名)

如果你没有给出文件的完整路径,那么该文件必须在你的“类路径”中,如果你不明白,最好给出文件的完整路径。

【讨论】:

    【解决方案2】:

    FileNotFound 不是在比较后抛出的,而是在创建时由您的 FileReader 抛出的。 FileReader 告诉您没有这样命名的文件。既然您说您确实创建了文件,那么可以有一些解释:

    • 可能您创建的文件位于错误的文件夹中。 java 程序的默认文件夹是项目文件夹。确保您的文件位于正确的文件夹中。否则,您可以将完整路径作为 FileReader 的参数:“/my/full/path/filename.extension”。
    • 也可能是扩展问题。如果您使用的是 Windows 操作系统,则扩展名可能隐藏在文件资源管理器中。右键单击您的文件并检查是否有这样的扩展名(例如:“.txt”)

    最终,您可以在 Java 下使用 FileWriter 打开文件,并尝试在您的程序中创建文件。您将更容易看到 Java 尝试访问的文件,这将帮助您确定问题。

    【讨论】:

      【解决方案3】:

      既然您提到您需要创建与 UserId 关联的文本文件,我建议在FileReaderTest class 中添加".txt"。类似的东西:

      File input = new File (String.valueOf (UserID)+".txt");
      

      或者更方便

      File input = new File (Integer.toString(UserID)+".txt");
      

      我认为这可以解决您的问题。

      【讨论】:

        最近更新 更多