从Java中的文件中读取Windows文件名

时间:2015-02-23 15:30:31

标签: java string file-io

背景

对于我正在编写的程序,我需要能够从文件中读取Windows文件名。不幸的是,Windows使用\而不是/,这使得这很棘手。我一直在尝试不同的方式,但它似乎永远不会奏效。这是Java代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test {
    static String localFile;
    static String localFilePrefix;
    static String user;

    public static void main(String[] args){
        readConfig("user.txt");
    }

    public static boolean readConfig(String cfgFilePath){
        try{
            BufferedReader reader = new BufferedReader(new FileReader(cfgFilePath));
            try{
                String line;
                while((line = reader.readLine()) != null){
                    if(line.indexOf("User") != -1){
                        user = line.substring(line.indexOf(" ")+1);
                    }else if(line.indexOf("LocalFile") != -1){
                        String tmp = line.substring(line.indexOf(" ")+1);
                        System.out.println("Test: " + tmp);
                        setLocalFile(tmp);
                    }
                }
            }catch(IOException ee){
                System.err.println(ee.getMessage());
            }
        }catch(FileNotFoundException e){
            System.err.println(e.getMessage());
        }
        return true;
    }

    public static void setLocalFile(String lFileName){
        System.out.println("FileName: " + lFileName);
        localFile = lFileName;
        if(new File(localFile).isDirectory()){
            System.out.println("Here!");
            localFilePrefix=localFile+File.separator;
        }
    }
}

这是配置文件:

User test
LocalFile C:\User

运行此代码,即该文件路径,不会打印Test: C:\Users,它应该是。它也不会打印FileName: C:\UsersHere!。但是,如果我从文件路径中删除“用户”,它可以正常工作并打印它应该的所有内容。它甚至将C:\识别为目录。

问题

我不希望用户被迫以特殊格式编写文件路径,因为我的程序无法处理它。那么我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

输入line.indexOf("User") != -1的第一个条件trueUser testLocalFile C:\User的第一个条件User(对于包含else if的每个路径都是如此) 。因此,不评估while ((line = reader.readLine()) != null) { if (line.startsWith("User")) { user = line.substring(line.indexOf(" ") + 1); } else if (line.startsWith("LocalFile")) { String tmp = line.substring(line.indexOf(" ") + 1); System.out.println("Test: " + tmp); setLocalFile(tmp); } } 条件。

使用.startsWith代替.indexOf

{{1}}