Finding user's "Downloads" folder & Katalon project's "Data Files" folder relative to the project folder

import com.kms.katalon.core.configuration.RunConfiguration as RunConfiguration

//sets SystemDownLoadFolder 
def SystemDownLoadFolder = (System.getProperty('user.home') + '/Downloads/')
SystemDownLoadFolder = SystemDownLoadFolder.replace('/', '\\')
println('SystemDownLoadFolder: ' + SystemDownLoadFolder)

//sets KatalonDataFolder 
def KatalonDataFolder = RunConfiguration.getProjectDir() + '/Data Files/'
KatalonDataFolder = KatalonDataFolder.replace('/', '\\')
println("KatalonDataFolder: " + KatalonDataFolder)

//sets KatalonDataFolder path for jpegFile.jpg
def jpegFile = RunConfiguration.getProjectDir() + '/Data Files/jpegFile.jpg'
jpegFile = jpegFile.replace('/', '\\')
println("jpegFile: " + jpegFile)

//sets KatalonDataFolder path for textFile.txt
def textFile = RunConfiguration.getProjectDir() + '/Data Files/textFile.txt'
textFile = textFile.replace('/', '\\')
println("textFile: " + textFile)

//sets KatalonDataFolder path for pdfFile.pdf
def pdfFile = RunConfiguration.getProjectDir() + '/Data Files/pdfFile.pdf'
pdfFile = pdfFile.replace('/', '\\')
println("pdfFile: " + pdfFile)

Or you can use this (originally posted by @kazurayam):
Result: dataFilesDir: C:\Users\JohnDoe\Katalon Studio\MyTestProject\Data Files\test.jpg

import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import com.kms.katalon.core.configuration.RunConfiguration

def projectDir = RunConfiguration.getProjectDir()
Path projectPath = Paths.get(projectDir)
Path dataFilesPath = projectPath.resolve('Data Files').resolve('test.jpg')
File dataFilesDir = dataFilesPath.toFile()
println("dataFilesDir: " + dataFilesDir)

1 Like

The following line is not good enough

Change this to the following

Path dataFilesPath = projectPath.resolve('Data Files').resolve('test.jpg')

You should avoid writing \\ and / as much as possible. The File.separator is OS dependent, that harms the portability of your code.

1 Like

The title was ??? for me.

How to set relative path for SystemDownFolder and KatalonDataFolder

I renamed it to

Finding user’s “Downloads” folder & Katalon project’s “Data Files” folder relative to the project folder

1 Like

You do not have to convert a Path to a File in order to println it.

import java.nio.file.Path
import java.nio.file.Paths
import com.kms.katalon.core.configuration.RunConfiguration

def projectDir = RunConfiguration.getProjectDir()
Path projectPath = Paths.get(projectDir)
Path image = projectPath.resolve('Data Files').resolve('test.jpg')
println "image: " + image.toString()

In fact, I rarely use java.io.File class in my code. I always prefer java.nio.file.Path, which was released lately in Java 7. I use java.io.File class only when a decades-old external API (originally developed before Java 7) requires java.io.File and does not know java.nio.file.Path, for example org.apache.commons.FileUtil

1 Like

After your feed-back, I’ve updated my posting as follows:
Finding user’s “Downloads” folder & Katalon project’s “Data Files” folder relative to the project folder

import java.nio.file.Path
import java.nio.file.Paths
import com.kms.katalon.core.configuration.RunConfiguration

//sets KatalonDataFolder 
def projectDir = RunConfiguration.getProjectDir()
Path projectPath = Paths.get(projectDir)
Path imageFile1 = projectPath.resolve('Data Files').resolve('test.jpg')
println("projectPath: " + projectPath)
println "imageFile1: " + imageFile1.toString()

//sets userDownloadPath 
def userDownloadDir = (System.getProperty('user.home'))
Path userDownloadPath = Paths.get(userDownloadDir)
Path imageFile2 = userDownloadPath.resolve('Downloads').resolve('test.jpg')
println("userDownloadPath : " + userDownloadPath )
println "imageFile2: " + imageFile2.toString()