<分区>
我正在尝试读取一个 .txt 文件并将每个句子用作一个团队的名称,同时使用该名称来寻找另一个 .txt 文件以获取其内容。所有 .txt 文件都在我的 Assets 文件夹的根目录下。第一个 .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();
}
}
使用“name”作为以下方法的参数:
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)
为什么这些字符串不相等以及如何使它们相等? (即,使非硬编码字符串等于硬编码字符串)