ADF считывает данные из текстового файла и назначает их переменной

Я хотел бы извлечь данные из текстового файла и назначить их переменной, прежде чем они смогут зафиксировать в базе данных. Я могу прочитать все данные внутри текстового файла, к сожалению, я не могу их разделить и присвоить определенной переменной. Мой код, как показано ниже:

private RichInputFile inputFile;
private UploadedFile file;
private String fileContent;
private String fileName;
private InputStream inputstream; 

 public void onFileUploadValueChangeListener(ValueChangeEvent valueChangeEvent) {
    resetValue();
    file = (UploadedFile)valueChangeEvent.getNewValue();
    try {

        inputstream = file.getInputStream();
        System.out.println("inputstream Name: " +inputstream);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void onUploadFile(ActionEvent actionEvent) {

    if (file != null && inputstream != null) {

        fileName = file.getFilename();
        System.out.println("Notepad Name: " +fileName);
        StringWriter writer = new StringWriter();

        try {

            IOUtils.copy(inputstream, writer);
            fileContent = writer.toString();
            System.out.println("File Content: " +fileContent);

        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Notepad Content: " +writer);
    }

    if (inputFile != null) {

        inputFile.resetValue();
        inputFile.setValid(true);

    }
}

public void resetValue() {

    if (fileName != null)
        fileName = null;

    if (fileContent != null)
        fileContent = null;

    if (inputstream != null)
        inputstream = null;
}

public void setInputFile(RichInputFile inputFile) {
    this.inputFile = inputFile;

}

public RichInputFile getInputFile() {
    return inputFile;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

public UploadedFile getFile() {
    return file;
}

public String getFileContent() {
    return fileContent;
}

public String getFileName() {
    return fileName;
}

Не могли бы дать мне какое-нибудь предложение?


person goh6319    schedule 28.11.2014    source источник
comment
Что именно идет не так?   -  person User404    schedule 28.11.2014
comment
Данные в тестовом файле были: 16.05.2014 17:19:00 6685 00:00:31 Тем временем я получил результат: 16.05.2014 17:19:00 6685 00:00:31 В той же строке. Я хочу разделить их соответственно.   -  person goh6319    schedule 28.11.2014
comment
данные в файле на двух строках или на одной?   -  person MihaiC    schedule 28.11.2014
comment
@MihaiC ниже - это пример данных в файле: 16.05.2014 17:19:00 6685 00:00:31 17.06.2014 17:19:00 6685 00:00:32 он содержит несколько строк   -  person goh6319    schedule 01.12.2014


Ответы (1)


РЕДАКТИРОВАТЬ Разделить строку через разделитель

Я предполагаю, что ваш входной файл содержит каждую запись в одной строке.

В этом случае замените onUploadFile этим кодом.

Он использует Scanner для чтения inputstream построчно. Делайте что хотите с каждой строчкой.

public void onUploadFile(ActionEvent actionEvent) {

    if (file != null && inputstream != null) {
        fileName = file.getFilename();
        System.out.println("Notepad Name: " + fileName);

        final Scanner scanner = new Scanner(inputstream);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            //do somthing with the current line, like store each one in a list
            System.out.println(line);
            String[] lineElements=line.split(" ");
            //16/05/2014 17:19:00 6685 00:00:31
            //in your case lineElements[0] should be a date 
            //lineElements[1] is a timestamp linked to the before date 
            //lineElements[2] is a number (int)
            //lineElements[3] is a timestamp
            //build string from elements [0] and [1] then transform it to a date
            //add logic for adding to database...
        }
    }

    if (inputFile != null) {

        inputFile.resetValue();
        inputFile.setValid(true);

    }
}
person MihaiC    schedule 28.11.2014
comment
Привет, ваш код работает нормально. Но мне просто интересно, как вы собираетесь различать типы данных? Например, данные, которые я читаю из блокнота, состоят из даты, строки и числа. Как я могу дифференцировать его и хранить в таблице? - person goh6319; 01.12.2014
comment
ну, в большинстве случаев вы не можете, если не протестируете каждый элемент строки раньше. обычно в этих случаях вы знаете структуру таблицы и структуру файла, они должны быть согласованы заранее. альтернативой является тестирование каждого элемента строки с помощью любого другого Integer.parseInt (), toString (), преобразования даты и т. д. до этого. - person MihaiC; 02.12.2014
comment
в вашем случае вам нужно разделить строку пробелом, а затем проверить каждый элемент, но я не рекомендую этого делать. вы должны знать, что файл всегда содержит даты, целые числа, строки (например) в таком порядке! поэтому, когда вы получаете такие элементы, как split [0], вы знаете, что это свидание. разделите строку с помощью String [] split = line.split (); - person MihaiC; 02.12.2014
comment
MihaiC: да ~ я сделал это с помощью функции Substring, и она работает хорошо. Просто нужно сделать какое-то преобразование для определенного формата данных. - person goh6319; 04.12.2014