All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalafix.internal.util.FileOps.scala Maven / Gradle / Ivy

package scalafix.internal.util

import java.io.BufferedReader
import java.io.File
import java.io.FileReader
import java.io.PrintWriter
import java.net.URL
import scala.meta.io.AbsolutePath

object FileOps {

  def listFiles(path: String): Vector[String] = {
    listFiles(new File(path))
  }

  def listFiles(file: File): Vector[String] = {
    if (file.isFile) { Vector(file.getAbsolutePath) } else {
      def listFilesIter(s: File): Iterable[String] = {
        val (dirs, files) = Option(s.listFiles()).toIterable
          .flatMap(_.toIterator)
          .partition(_.isDirectory)
        files.map(_.getPath) ++ dirs.flatMap(listFilesIter)
      }
      for {
        f0 <- Option(listFilesIter(file)).toVector
        filename <- f0
      } yield filename
    }
  }

  def readURL(url: URL): String = {
    scala.io.Source.fromURL(url)("UTF-8").getLines().mkString("\n")
  }

  /**
    * Reads file from file system or from http url.
    */
  def readFile(filename: String): String = {
    if (filename matches "https?://.*") {
      readURL(new URL(filename))
    } else {
      readFile(new File(filename))
    }
  }

  def readFile(file: File): String = {
    // Prefer this to inefficient Source.fromFile.
    val sb = new StringBuilder
    val br = new BufferedReader(new FileReader(file))
    val lineSeparator = System.getProperty("line.separator")
    try {
      var line = ""
      while ({
        line = br.readLine()
        line != null
      }) {
        sb.append(line)
        sb.append(lineSeparator)
      }
    } finally {
      br.close()
    }
    sb.toString()
  }

  def getFile(path: String*): File = {
    new File(path.mkString(File.separator))
  }

  def writeFile(file: AbsolutePath, content: String): Unit = {
    writeFile(file.toString(), content)
  }

  def writeFile(file: File, content: String): Unit = {
    writeFile(file.getAbsolutePath, content)
  }

  def writeFile(filename: String, content: String): Unit = {
    // For java 6 compatibility we don't use java.nio.
    val pw = new PrintWriter(new File(filename))
    try {
      pw.write(content)
    } finally {
      pw.close()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy