2016-10-31 4 views
3

У меня есть программа Java, которая преобразует CSV-файлы в формат ARFF Weka.Java Weka - Невозможно создать новый выходной файл. Используется стандартный вывод

Он отлично работает в первый раз, это запустить в любой сессии, однако впоследствии он всегда терпит неудачу с сообщением:

Невозможно создать новый выходной файл. Используется стандартный выход.

Вот программа:

import java.io.File; 
import weka.core.Instances; 
import weka.core.converters.ArffSaver; 
import weka.core.converters.CSVLoader; 

public class CSV2Arff { 
     /** 
    * takes 2 arguments: 
    * - CSV input file 
    * - ARFF output file 
    * @param args 
    * @throws java.lang.Exception 
    */ 
    public static void main(String[] args) throws Exception { 
    if (args.length != 2) { 
     System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n"); 
     System.exit(1); 
    } 

    // load CSV 
    CSVLoader loader = new CSVLoader(); 
    loader.setSource(new File(args[0])); 
    Instances data = loader.getDataSet(); 

    // save ARFF 
    ArffSaver saver = new ArffSaver(); 
    saver.setInstances(data); 
    saver.setFile(new File(args[1])); 
    //saver.setDestination(new File(args[1])); 
    saver.writeBatch(); 
    } 
} 

Полная ошибка из консоли:

Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-nio-8009"] 
Oct 31, 2016 3:53:39 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 6142 ms 
Cannot create a new output file. Standard out is used. 
+0

Вы можете показать весь стек? – davidxxx

+0

Вы всегда вызываете программу с одним и тем же именем назначения? – Kacper

+0

@Kacper Да, он должен перезаписать файл. –

ответ

2

Согласно weka mail list, эта ошибка является проблемой файла. Другие электронные письма предлагают использовать Java I/O approch для сохранения файла arff.

This error is coming from the CSVSaver and indicates that it is unable 
to create the directory and/or file that you've specified. More than 
likely it is something to do with permissions on where it is trying to 
write to. 

Попробуйте следующий код.

import java.io.FileWriter; 
import java.io.BufferedWriter; 
import java.io.File; 
import weka.core.Instances; 
import weka.core.converters.ArffSaver; 
import weka.core.converters.CSVLoader; 

public class CSV2Arff { 
     /** 
    * takes 2 arguments: 
    * - CSV input file 
    * - ARFF output file 
    * @param args 
    * @throws java.lang.Exception 
    */ 
    public static void main(String[] args) throws Exception { 
    if (args.length != 2) { 
     System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n"); 
     System.exit(1); 
    } 

    // load CSV 
    CSVLoader loader = new CSVLoader(); 
    loader.setSource(new File(args[0])); 
    Instances data = loader.getDataSet(); 
    String fileName = args[1]; 


    // save ARFF 
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); 
    writer.write(data.toString()); 
    writer.flush(); 
    writer.close(); 

    } 
} 
1

Я не думаю, что ArffSaver собирается перекрыть файл. Если вы хотите перезаписать его, удалите файл, если он существует до того, как установка станет целевой. Если вы хотите объединить данные, пожалуйста, попробуйте writeIncremental

У вас есть:

saver.setFile(new File(args[1])); 

я бы что-то вроде:

File f = new File(args[1]); 
if(f.exists()) { 
    f.delete(); 
}; 
saver.setFile(new File(args[1]); 
+0

@ Hack-R Я отредактировал ответ. – Kacper

+0

Это имеет для меня общий смысл, но на самом деле он по-прежнему бросает ту же ошибку: «Невозможно создать новый выходной файл. Используется стандартный вариант». , Я попробовал очистить рабочий каталог, обновить проект и перезапустить Tomcat. –

+0

@ Hack-R Можете ли вы попробовать сохранить несколько файлов. Просто чтобы подтвердить, что проблема заключается в использовании одного файла? 'int i = (int) Math.ceil (Math.random() * 10000); saver.setFile (новый файл (args [1] + i)); ' – Kacper

Смежные вопросы