我正在使用html表单来输入文件并使用doPost()
HTTPservlet
方法上传文件。 [此部分在第一个包中完成]现在,在此doPost方法中调用了从类Main.java
解析上传文件的函数。此函数位于另一个包中。 [转移到另一个包 - > ]这里类Main.java
调用Integrated.java
,它需要调用所有类和函数实例,以便解析上传的文件。 (我有单独的类,用于从解析的数据中提取数据,分块,排序和生成csv)
解析文件后,我将值放在最后一个文件CSVgenerator.java
中初始化的变量中。这些变量的值之前在类SortAndOutput.java
中添加。为了测试我在课堂上获得正确的值,我在调用函数writingDatabase()
和writingTraining()
之前打印变量。这两个函数将变量值保存在CSV文件中。
我正在使用OpenCSV来编写文件。使用apache Tika提取数据和使用lingpipe进行解析。
大问题: 我(有意)在CSVgenerator.java中编写主函数并测试它。两个文件都正确写入。缺失值列留空。完善! (如果我有任何CSV单独打开,它会引发一个像它应该的异常)
但是当我注释掉主要功能并在服务器上一起运行整个项目时,不会写入CSV。即使文件是单独打开的(在eclipse之外),它也不会出错。
我通过在Main.java
中放置一个main方法测试了整个集成的Java代码,它运行得很好。运行servlet /我在服务器上运行项目时会出现问题。
我不知道其他文件是否有用,我正在发布层次结构和CSVgenerator类 Workspace Screenshot 的 CSVGenerator.java
package com.fypv1.parser;
import java.io.*;
import java.util.*;
import com.opencsv.*;
public class CSVgenerator {
public static String CGPAinitial="-";
public static String universityNameOut="-";
public static String emailIDOut="-";
public static String phoneNoOut="-";
public static String phpKnow="NO";
public static String databaseKnow="NO";
public static String jsKnow="NO";
public static String bootStrapKnow="NO";
public static String aspKnow="NO";
public static String htmlKnow="NO";
public static String cssKnow="NO";
public static String jqueryKnow="NO";
public static String jspKnow="NO";
public static String reactjsKnow="NO";
public static String ajaxKnow="NO";
public static String oopKnow="NO";
public static String javaKnow="NO";
public static String androidKnow="NO";
private int idNumber;
Writer wr;
Scanner scanner;
/*
* public static void main(String[] args) throws IOException {
new CSVgenerator();
}
*/
//DEFAULT CLASS CONSTRUCTOR
CSVgenerator() throws IOException
{
String trainingCSV = "TrainingData.csv";
String databaseCSV = "databaseInfo.csv";
String idNumberFile = "idnum.txt";
try {
scanner = new Scanner(new File(idNumberFile));
SortAndOutput.applicantIDnumber=scanner.nextInt();
idNumber=SortAndOutput.applicantIDnumber;
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
System.out.println("IDnumberFileUnavailable");
}
try {
wr = new FileWriter(idNumberFile);
int newIDNumber=idNumber+1;
wr.write(newIDNumber+"");
wr.close();
} catch (IOException e1) {
//
e1.printStackTrace();
}
//System.out.println( String.valueOf(idNumber)+"+"+universityNameOut+"+"+CGPAinitial+"+"+emailIDOut+"+"+ phoneNoOut+"+"+CGPAinitial+"+"+phpKnow+"+"+ databaseKnow+"+"+ jsKnow+"+"+ bootStrapKnow+"+"+ aspKnow+"+"+ htmlKnow+"+"+ cssKnow+"+"+ jqueryKnow+"+"+ jspKnow+"+"+ reactjsKnow+"+"+ ajaxKnow+"+"+ "?");
writingDatabase(databaseCSV);
writingTraining(trainingCSV);
}//CONSTRUCTOR ENDS
void writingDatabase(String databaseCSV) throws IOException {
CSVWriter dbWriter;
String [] record1={String.valueOf(idNumber),universityNameOut,CGPAinitial,emailIDOut, phoneNoOut };
dbWriter= new CSVWriter(new FileWriter(databaseCSV, true));
dbWriter.writeNext(record1);
dbWriter.close();
}
void writingTraining(String trainingCSV) throws IOException {
CSVWriter trainingWriter;
String [] record={String.valueOf(idNumber),CGPAinitial,phpKnow, databaseKnow, jsKnow, bootStrapKnow, aspKnow, htmlKnow, cssKnow, jqueryKnow, jspKnow, reactjsKnow, ajaxKnow, "?"};
trainingWriter = new CSVWriter(new FileWriter(trainingCSV, true));
trainingWriter.writeNext(record);
trainingWriter.close();
}
}
Integrated.java
ResumeUploadService.java(servlet)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
Part file = request.getPart("file");
resumeFileName = Paths.get(file.getSubmittedFileName()).getFileName().toString();
file.write(path + resumeFileName);
printOnClient(response, "Upload Successful!");
}
catch (Exception e) {
printOnClient(response, "Upload Failed!");
}
new Main(path,resumeFileName);
}
如果需要更多代码来调试,请告诉我。
答案 0 :(得分:0)
它两次都在更新文件。当它在服务器上运行时,它在eclipse文件夹中创建文件,当我作为java应用程序运行时,它更新了项目文件夹中的文件
除非另有说明,否则您的文件将写入应用程序文件夹中。这是正在运行的应用程序的相对路径。
仅仅因为你在Eclipse中测试了应用程序并不意味着服务器部署会写入同一个文件夹。
理想情况下,您可以为Servlet指定配置参数,以获取要存储文件的绝对路径