Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package utilities; import java.util.ArrayList; import java.util.List; import java.util.Iterator; import java.io.File; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FileUtils; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import model.Study; /** * * @author aryner */ public class FileIO { public static final int PHOTO = 1; public static final int EXCEL = 2; public static final int CSV = 3; public static final int TABLE = 4; public static final int UPLOAD_SIZE_THRESHOLD = 100 * 1024; public static final int MAX_UPLOAD_SIZE = 4000000 * 1024; public static final String EXCEL_FILE = "excel.xls"; public static final String CSV_FILE = "csv.csv"; public static final String TEMP_DIR = ".." + Constants.FILE_SEP + "webapps" + Constants.FILE_SEP + "temp" + Constants.FILE_SEP; public static final String BASE_PICTURE_DIR = ".." + Constants.FILE_SEP + "webapps" + Constants.FILE_SEP + "Photo_Grader" + Constants.FILE_SEP + "pictures" + Constants.FILE_SEP; public static ArrayList<String> upload(HttpServletRequest request, int type, Study study) { ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> picNames = type == PHOTO ? new ArrayList<String>() : null; ServletFileUpload upload = getFileUpload(); try { List fileItems = upload.parseRequest(request); Iterator iterator = fileItems.iterator(); while (iterator.hasNext()) { FileItem fileItem = (FileItem) iterator.next(); String fileName = fileItem.getName(); errors.addAll(type == PHOTO ? uploadPhotos(fileItem, fileName, picNames, study) : uploadTable(fileItem, fileName, study)); } } catch (org.apache.commons.fileupload.FileUploadException e) { e.printStackTrace(System.err); } catch (Exception e) { e.printStackTrace(System.err); } finally { cleanTempDir(); } errors.addAll(SQL.Helper.insertAndUpdateUploads(type, study, picNames)); return errors; } private static ServletFileUpload getFileUpload() { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(UPLOAD_SIZE_THRESHOLD); new File(TEMP_DIR).mkdirs(); factory.setRepository(new File(TEMP_DIR)); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(MAX_UPLOAD_SIZE); return upload; } private static void cleanTempDir() { try { FileUtils.cleanDirectory(new File(TEMP_DIR)); } catch (java.io.IOException e) { e.printStackTrace(System.err); } } private static ArrayList<String> uploadPhotos(FileItem fileItem, String fileName, ArrayList<String> picNames, Study study) throws Exception { ArrayList<String> errors = new ArrayList<String>(); if (hasPhotoExtension(fileName)) { String fileDir = BASE_PICTURE_DIR + Tools.getGeneratedNumber(study.getPhoto_attribute_table_name()) + Constants.FILE_SEP; new File(fileDir).mkdirs(); File file = new File(fileDir + fileName); fileItem.write(file); picNames.add(fileName); } else { errors.add(fileName + Constants.HAS_WRONG_EXTENSION); } return errors; } public static void deletePhoto(String fileName, String dir) { String fileDir = BASE_PICTURE_DIR + dir + "/"; new File(fileDir + fileName).delete(); } private static ArrayList<String> uploadTable(FileItem fileItem, String fileName, Study study) throws Exception { ArrayList<String> errors = new ArrayList<String>(); new File(TEMP_DIR).mkdirs(); File file = new File(TEMP_DIR + (Tools.hasExcelExtension(fileName) ? EXCEL_FILE : CSV_FILE)); fileItem.write(file); TableReader.extractTableData(file, study, errors); return errors; } public static void createCSV(ArrayList<String> csv, String fileName) { String pathAndName = Constants.HOME + Constants.FILE_SEP + "Desktop" + Constants.FILE_SEP + fileName; String suffix = getSuffix(pathAndName, ".csv"); if (csv != null && !csv.isEmpty()) { try { FileOutputStream fileOut = new FileOutputStream(pathAndName + suffix + ".csv"); for (String line : csv) { fileOut.write((line + "\n").getBytes()); } fileOut.close(); } catch (java.io.FileNotFoundException e) { e.printStackTrace(System.err); } catch (java.io.IOException e) { e.printStackTrace(System.err); } } } public static String getSuffix(String pathAndFile, String extension) { int count = 0; String suffix = ""; while (new File(pathAndFile + suffix + extension).exists()) { count++; suffix = "(" + count + ")"; } return suffix; } public static String getExtension(String fileName) { return fileName.contains(".") ? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : ""; } public static boolean hasPhotoExtension(String fileName) { String extension = getExtension(fileName).toLowerCase(); return extension.equals("jpg") ? true : extension.equals("jpeg") ? true : extension.equals("png") ? true : extension.equals("gif"); } }