1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.eclipse.aether.spi.io; 20 21 import java.io.*; 22 import java.nio.ByteBuffer; 23 import java.nio.file.Files; 24 import java.nio.file.NoSuchFileException; 25 import java.nio.file.Path; 26 27 /** 28 * A utility component to perform file-based operations. 29 * 30 * @since 2.0.0 31 */ 32 public interface PathProcessor { 33 /** 34 * Returns last modified of path in milliseconds, if exists. 35 * 36 * @param path The path, may be {@code null}. 37 * @throws UncheckedIOException If an I/O error occurs. 38 */ 39 default long lastModified(Path path, long defValue) { 40 try { 41 return Files.getLastModifiedTime(path).toMillis(); 42 } catch (NoSuchFileException e) { 43 return defValue; 44 } catch (IOException e) { 45 throw new UncheckedIOException(e); 46 } 47 } 48 49 /** 50 * Returns size of file, if exists. 51 * 52 * @param path The path, may be {@code null}. 53 * @throws UncheckedIOException If an I/O error occurs. 54 */ 55 default long size(Path path, long defValue) { 56 try { 57 return Files.size(path); 58 } catch (NoSuchFileException e) { 59 return defValue; 60 } catch (IOException e) { 61 throw new UncheckedIOException(e); 62 } 63 } 64 65 /** 66 * Writes the given data to a file. UTF-8 is assumed as encoding for the data. Creates the necessary directories for 67 * the target file. In case of an error, the created directories will be left on the file system. 68 * 69 * @param target The file to write to, must not be {@code null}. This file will be overwritten. 70 * @param data The data to write, may be {@code null}. 71 * @throws IOException If an I/O error occurs. 72 */ 73 void write(Path target, String data) throws IOException; 74 75 /** 76 * Writes the given stream to a file. Creates the necessary directories for the target file. In case of an error, 77 * the created directories will be left on the file system. 78 * 79 * @param target The file to write to, must not be {@code null}. This file will be overwritten. 80 * @param source The stream to write to the file, must not be {@code null}. 81 * @throws IOException If an I/O error occurs. 82 */ 83 void write(Path target, InputStream source) throws IOException; 84 85 /** 86 * Moves the specified source file to the given target file. If the target file already exists, it is overwritten. 87 * Creates the necessary directories for the target file. In case of an error, the created directories will be left 88 * on the file system. 89 * 90 * @param source The file to move from, must not be {@code null}. 91 * @param target The file to move to, must not be {@code null}. 92 * @throws IOException If an I/O error occurs. 93 */ 94 void move(Path source, Path target) throws IOException; 95 96 /** 97 * Copies the specified source file to the given target file. Creates the necessary directories for the target file. 98 * In case of an error, the created directories will be left on the file system. 99 * 100 * @param source The file to copy from, must not be {@code null}. 101 * @param target The file to copy to, must not be {@code null}. 102 * @throws IOException If an I/O error occurs. 103 */ 104 void copy(Path source, Path target) throws IOException; 105 106 /** 107 * Copies the specified source file to the given target file. Creates the necessary directories for the target file. 108 * In case of an error, the created directories will be left on the file system. 109 * 110 * @param source The file to copy from, must not be {@code null}. 111 * @param target The file to copy to, must not be {@code null}. 112 * @param listener The listener to notify about the copy progress, may be {@code null}. 113 * @return The number of copied bytes. 114 * @throws IOException If an I/O error occurs. 115 */ 116 long copy(Path source, Path target, ProgressListener listener) throws IOException; 117 118 /** 119 * A listener object that is notified for every progress made while copying files. 120 * 121 * @see PathProcessor#copy(Path, Path, ProgressListener) 122 */ 123 interface ProgressListener { 124 125 void progressed(ByteBuffer buffer) throws IOException; 126 } 127 }