我正在编写一个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);
答案 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"