java - opencsv类单独工作,但在被另一个类调用时不写CSV

时间:2017-09-03 18:19:48

标签: java csv parsing servlets opencsv

我正在使用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);

    }

如果需要更多代码来调试,请告诉我。

1 个答案:

答案 0 :(得分:0)

  

它两次都在更新文件。当它在服务器上运行时,它在eclipse文件夹中创建文件,当我作为java应用程序运行时,它更新了项目文件夹中的文件

除非另有说明,否则您的文件将写入应用程序文件夹中。这是正在运行的应用程序的相对路径

仅仅因为你在Eclipse中测试了应用程序并不意味着服务器部署会写入同一个文件夹。

理想情况下,您可以为Servlet指定配置参数,以获取要存储文件的绝对路径