【发布时间】:2023-03-13 05:47:01
【问题描述】:
我正在尝试读取 .txt 文件并将每个句子用作团队的名称,同时使用该名称查找另一个 .txt 文件以获取其内容。所有 .txt 文件都在我的资产文件夹的根目录下。第一个.txt 文件工作正常,我使用assetmanager.open 和readLine() 来获取字符串,但是当使用该字符串作为参数来获取第二个.txt 时,我得到java.io.FileNotFoundException。但是,当使用硬编码字符串调用同一个 .txt 文件时,一切正常。经过进一步检查,我发现硬编码字符串和用作参数的字符串在使用equals() 函数后返回false。
这是调用first.txt的方法
private void loadTeams() {
try {
BufferedReader r = new BufferedReader(new InputStreamReader(assetManager.open("matches.txt")));
String name, bio, trainer;
for(int i = 0; i < 4; i++){
name = r.readLine();
bio = r.readLine();
trainer = r.readLine();
System.out.println(name+", "+bio+", "+trainer);
teams[i] = new Team(name, bio, i, loadPlayers(name), trainer);
}
r.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
使用“名称”作为以下方法的参数:
private Player[] loadPlayers(String teamName){
Player[] players = new Player[11];
try {
String path = "team_Netherlands.txt"; //works
String path2 = "team_"+teamName+".txt"; //doesn't work?
System.out.println("are "+path+" and " +path2 +" the same? "+path.equals(path2));
BufferedReader r = new BufferedReader(new InputStreamReader(assetManager.open(path2)));
//perform operations on the obtained info
r.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return players;
}
文件中的第一句是“Netherlands”(不带引号)
我认为这应该导致 path2 变量的team_Netherlands.txt。
但是,使用它会使应用程序崩溃。使用 path 变量就可以了。 println 确认字符串不相等。 (见logcat的第一句)
日志猫:
05-26 11:18:23.152 2960-2960/com.myname.testapp I/System.out: are team_Netherlands.txt and team_Netherlands.txt the same? false
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: java.io.FileNotFoundException: team_Netherlands.txt
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.content.res.AssetManager.openAsset(Native Method)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.content.res.AssetManager.open(AssetManager.java:354)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.content.res.AssetManager.open(AssetManager.java:328)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at com.myname.testapp.Poule_Activity.load_Players(Poule_Activity.java:144)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at com.myname.testapp.Poule_Activity.load_Teams(Poule_Activity.java:94)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at com.myname.testapp.Poule_Activity.onCreate(Poule_Activity.java:53)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.Activity.performCreate(Activity.java:5990)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:156)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 11:18:23.152 2960-2960/com.myname.testapp W/System.err: at android.os.Looper.loop(Looper.java:211)
05-26 11:18:23.153 2960-2960/com.myname.testapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5373)
05-26 11:18:23.153 2960-2960/com.myname.testapp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
05-26 11:18:23.153 2960-2960/com.myname.testapp W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
05-26 11:18:23.153 2960-2960/com.myname.testapp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
05-26 11:18:23.153 2960-2960/com.myname.testapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
为什么这些字符串不相等以及如何使它们相等? (即,使非硬编码字符串等于硬编码字符串)
【问题讨论】:
-
检查两个字符串长度
-
感谢您的快速回复 :) 我认为您正在做一些事情:路径长度:20,路径 2 长度:16,您知道是什么原因造成的吗?
-
试试
path.trim().equals(path2.trim()) -
@Amit.rk3,仍然返回 false :(
-
或
"team_"+team_Name.trim()+".txt",我想这应该是我的第一条评论:)