我希望我的文件路径适用于使用Java的Linux和Windows环境

时间:2018-01-25 09:25:54

标签: java linux windows environment

我正在编写一个java代码来创建工作空间目录以签入单个或多个文件。从jsp页面接收文件名 下面是目录和文件路径创建的代码片段。

try {
        File uploadedFile = null;
        String tmpDir = context.createWorkspace();
        String filePath = tmpDir + java.io.File.separator;
        //System.out.println("filePath"+ filePath);
        //String filePath1 = tmpDir + java.util.regex.Pattern.quote(File.separator);
        //System.out.println("filePath1 "+ filePath1);
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setRepository(new File(tmpDir));
        ServletFileUpload upload = new ServletFileUpload(factory);
        List<FileItem> items = upload.parseRequest(request);
        HashMap hmRequest = new HashMap();
        String sFileName = DomainConstants.EMPTY_STRING;
        String sParamKey = DomainConstants.EMPTY_STRING;
        String sParamValue = DomainConstants.EMPTY_STRING;
        StringBuffer fileNameList = new StringBuffer();
        StringBuffer nameList = new StringBuffer();
        StringBuffer uploadfileNameList = new StringBuffer();
        StringBuffer uploadnameList = new StringBuffer();
        StringBuffer coverletterfileNameList = new StringBuffer();
        StringBuffer coverletternameList = new StringBuffer();

        if (null != items && items.size() > 0) 
        {
            Iterator<FileItem> iter = items.iterator();

            while (iter.hasNext()) 
            {
                FileItem item = iter.next();
                if (item.isFormField()) 
                {
                    sParamKey = item.getFieldName();
                    sParamValue = item.getString();
                    hmRequest.put(sParamKey, sParamValue);
                }
            }

            Iterator<FileItem> iter1 = items.iterator();
            while (iter1.hasNext()) 
            {
                FileItem item1 = iter1.next();
                if (!item1.isFormField()) 
                {
                    //String sFileName1=null;
                    sFileName = item1.getName();
                    String fieldname = item1.getFieldName();
                    if (UIUtil.isNotNullAndNotEmpty(sFileName) && fieldname.equals("coverLetterFile")) 
                    {
                        sFileName = sFileName.substring(sFileName.lastIndexOf("\\") + 1);
                        sFileName = 
                        System.out.println("sFileName"+ sFileName);
                        //sFileName1 = sFileName.substring(sFileName.lastIndexOf(java.util.regex.Pattern.quote(File.separator)) + 1);
                        //System.out.println("sFileName1111"+ sFileName1);
                        uploadedFile = new File(tmpDir + File.separator + sFileName);
                        item1.write(uploadedFile);
                        coverletterfileNameList.append(tmpDir + File.separator + sFileName);
                        coverletterfileNameList.append(",");
                        coverletternameList.append(sFileName);
                        coverletternameList.append(",");
                    }

当我在Windows上工作时,下线是否会在linux环境中造成问题。任何人都可以为此建议解决方案吗?

sFileName = sFileName.substring(sFileName.lastIndexOf(“\”)+ 1);

3 个答案:

答案 0 :(得分:0)

使用File.separator填充系统环境的正确分隔符,而不是硬编码字符串。

答案 1 :(得分:0)

使用File.separator 例如: FileName = sFileName.substring(sFileName.lastIndexOf(File.separator) + 1);

java.io.File类包含,
File.separator:平台相关的默认名称分隔符作为字符串。 对于Windows,它是'\'而对于unix它是'/'。

答案 2 :(得分:0)

正如其他人所建议的那样,您可以使用File.separator代替硬编码的String来获取索引。

但是,如果可以,我建议使用Java Path代替(自NIO API中的Java 1.7以来可用)

Path类提供自定义操作以在系统路径上执行操作并自动管理分隔符。

我举一个使用示例,但您可以谷歌查看更多信息:

    Path myPath = Paths.get(root, "subFolder", "fileName");
    System.out.println("My path: " + myPath.toString());
    Path file = myPath.getFileName();
    System.out.println("My file: " + file.toString());

如您所见,它非常简单。 在这种情况下,root将是您从jsp获取的文件路径。您可以使用aditional文件夹(或只是您收到的文件夹)构建路径

使用根路径"C:/tempFolder",输出将为:

在Windows上:

"My path: C:\tempFolder\subFolder\fileName"
"My file: fileName"

在Linux和Mac上:

"My path: /tempFolder/subFolder/fileName"
"My file: fileName"