读取文件到字符串和

Read a file to string and

我正在帮助为 Minecraft 编写 mod,我决定尝试为我们的员工和赢得比赛的人编写一些特殊的披风。我知道了,所以它会下载包含播放器 UUID 的 .txt 文件,这是有效的。当我强迫它时,我也让它可以很好地显示斗篷。

关键字...当我强迫它时。我是一个 Java 业余爱好者,我完全坚持实际将文件打印成字符串。我见过的其他解决方案将每一行打印成一个字符串,但这不是我想要的。我想将整个文件打印成一个字符串,然后设置一个布尔值(如果它包含与我之前在代码中设置的字符串变量相匹配的内容)。 打印整个文件应该不是问题,因为它是一个非常小的文件。

所以我不想要上面的原因是因为我在 Google 上搜索过的代码使用 while 语句等进行迭代。我假设它会不断地将字符串更改为它正在读取的行,所以如果我使用这些示例之一并检查匹配的 UUID,如果找到匹配的 UUID,它会将变量设置为 true,然后立即设置它进入下一行后返回false,对吗?

我之所以做出这些假设,是因为我无法在 Eclipse 中使用测试环境,此时测试某些东西并发现它不起作用并再次测试将花费很长时间;为此,我必须编译 mod 并使用我的帐户登录,因为要获取此代码所需的信息,我需要使用我的帐户登录。我使用的版本有点旧(我是 Beta 1.7.3 播放器)并且不支持登录变量。尽管我使用的是 Beta 1.7.3,但我们的 mod 正确更新了游戏的身份验证并允许使用 Mojang API,所以如果你想知道我为什么或如何尝试获取那个版本的UUID,就是这个原因。

我之所以在这里发帖而不是在 Minecraft 论坛之类的地方发帖,是因为虽然此代码是针对 Minecraft 的,但文件检查内容是一般性的 Java,所以希望这是正确的地方.抱歉,如果这被认为是其他一些涉及文件阅读的帖子的重复,但我发现我的情况有点不同。

如果这里的任何内容写得愚蠢或令人困惑,也很抱歉。玩了一晚上累死我了,校对的功夫基本没了。

基本上,如果 UUID 与下载的文本文件中的 UUID 匹配,我只需要设置一个布尔值。我的目标是使用字符串变量和 .toString().contains(profile.getId().toString()) 为您可以看到的员工 cape 文件和比赛 cape 文件设置一个布尔值。预先感谢您阅读本文。这是我用来抓取和下载文件的代码,以防您想要查看它。

         InputStream staff;
         InputStream contest;

         File staffList;
         File contestList;
         String capeInfo =  System.getenv("APPDATA") + "/.minecraft/capeinfo/";
        try {
            staffList = new File(capeInfo + "staff.txt");
            staffList.mkdirs(); staffList.createNewFile();
            staff = new URL("https://www.dropbox.com/s/q6f4729i2zu02nz/staff.txt?dl=1").openStream();
            Files.copy(staff, Paths.get(capeInfo + "staff.txt"), StandardCopyOption.REPLACE_EXISTING);

            contestList = new File(capeInfo + "contest.txt");
            contestList.mkdirs(); contestList.createNewFile();
            contest = new URL("https://www.dropbox.com/s/kvvkfk6emms3qg5/contest.txt?dl=1").openStream();
            Files.copy(contest, Paths.get(capeInfo + "contest.txt"), StandardCopyOption.REPLACE_EXISTING);
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return;
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

您可以使用 apache 中的 readFileToString 函数从您的文件中获取字符串

import java.io.*;
import java.nio.charset.*;
import org.apache.commons.io.*;

public String readFile(String fileName) throws IOException {
    File file = new File(fileName);
    return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
}

...

String staffListContent = readFile(capeInfo + "staff.txt") 

然后检查你的字符串是否真的包含你要查找的内容

if(staffListContent.contains(...)) {
    yourboolean = true
}

如果您需要的不止于此,请提供一个您真正想要的最小示例。

输入流也可以

 InputStream is = new FileInputStream("YourfileName");
        BufferedReader buf = new BufferedReader(new InputStreamReader(is));

        String line = buf.readLine();
        StringBuilder sb = new StringBuilder();

        while(line != null){
            sb.append(line).append("\n");
            line = buf.readLine();
        }

        String fileAsString = sb.toString();
        System.out.println(fileAsString);
        ```