Ваадин 7: Загрузка файла

У меня есть компонент загрузки, в котором я должен импортировать файл xml, чтобы проанализировать его.

Я пытаюсь использовать метод File.createTempFile для физического создания файла, но происходит что-то странное.

Например, если я возьму файл с именем «test.xml» и использую метод createTempFile для его создания на диске, имя созданного файла станет примерно таким, как «test.xml13234xml». Как правильно создать файл? ?


person Rafael Roque    schedule 08.09.2013    source источник


Ответы (1)


Это ожидается при использовании, например, метода createTempFile, поскольку он неявно создает файл со случайным префиксом:

// a part of createTempFile method
private static final SecureRandom random = new SecureRandom();
static File generateFile(String prefix, String suffix, File dir) {
    long n = random.nextLong();
    if (n == Long.MIN_VALUE) {
        n = 0;      // corner case
    } else {
        n = Math.abs(n);
    }
    return new File(dir, prefix + Long.toString(n) + suffix);
}

который должен дать что-то вроде «test.xml13234xml».

Если вы хотите создать файл с правильным именем и сохранить его для последующего использования, вы можете переименовать/переместить его в методе uploadSucceeded.

public class ExampleUpload implements Upload.Receiver, Upload.SucceededListener {
    private Upload xmlUpload;
    private File tempFile;

    public ExampleUpload() {
        this.xmlUpload = new Upload("Upload:", this);
        this.xmlUpload.addSucceededListener(this);
    }

    @Override
    public OutputStream receiveUpload(String filename, String mimeType) {
        try {
            tempFile = File.createTempFile(filename, "xml");
            tempFile.deleteOnExit();
            return new FileOutputStream(tempFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public void uploadSucceeded(SucceededEvent event) {
        try {
            File destinationFile = new File("c:\\" + event.getFilename());
            FileUtils.moveFile(tempFile, destinationFile));
            // TODO read and parse destinationFile
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
person wypieprz    schedule 18.09.2013